delphi 语言调用C++的DLL, 怎么接收参数是引用?

delphi 调用C++的Dll,函数参数的引用,delphi 调用的时候该怎么接收啊?
图片说明
就像这样,delphi该怎么用啊

c++

1个回答

delphi里面参数如果是引用类型在参数前面加var就行了。
function RecognizeForm(var nCellCount:Integer;var nTemplateType:Integer):Integer;register;external 'dllname.dll';

register对应PASCAL EXPORT,因为你这里没有说明这个是什么类型。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
delphi 语言调用C++的DLL, 怎么接收参数是引用?

delphi 调用C++的Dll,函数参数的引用,delphi 调用的时候该怎么接收啊? ![图片说明](https://img-ask.csdn.net/upload/201905/05/1557036804_556551.jpg) 就像这样,delphi该怎么用啊

delphi调用c++ dll参数char* 的问题

我有一个c作的dll 具体说明如下 1、文件解密接口函数及参数说明: int __stdcall DecodeFile(char* InFile, //要解密的文件 char* Key, //解密的密钥 char* OutFile, //解密后的文件,在解密路径下的同名XML文件 char* Info); //提示信息函数返回 0 成功,非0失败。 2、动态调用实例: String jmfile = 要解密的文件路径; String key = 要解密的文件密钥; String strDllFile = "DecodeXMLFIle.dll"; //解密动态库文件名 DLLInst = LoadLibrary(strDllFile.c_str()); if( !DLLInst) Application->MessageBox( "DLL装载错误", "错误信息", MB_ICONERROR); else { /l输入函数声明 int (__stdcall *DecodeFile)(char* InFile, char* Key, char* OutFile, char* Info); DecodeFile = (int (__stdcall *)(char* InFile, char* Key, char* OutFile, char* Info))GetProcAddress( DLLInst, "DecodeFile"); if (DecodeFile) { char outfilestr[1000] = {0}; char msgInfostr[1000] = {0}; int dRes = DecodeFile(jmfile.c_str(),key.c_str(),outfilestr,msgInfostr); if(dRes != 0) { String Msgstr = "提示信息:解密失败 "+AnsiString(msgInfostr); Application->MessageBox(Msgstr, "错误信息", MB_ICONERROR); }else Application->MessageBox("成功", "成功", MB_OK); } } FreeLibrary(DLLInst); ---------------------------------------------- 如何用delph声明这个函数并调用呢

C#调用Delphi dll文件问题

最近手头一个项目,需要用到C#调用Delphi写出的dll文件(调用的是modelDLL.dll,但是该dll文件还需要另外一个borlndmm.dll文件支持,调用的时候已经把这两个dll文件放到debug目录下了),直接附上相关代码: Delphi相关源码: ``` type TCharStr=array[0..599] of char; ``` 用Delphi写的直接调用可运行,代码如下: ``` procedure TMainDLLForm.PedBitBtnClick(Sender: TObject); var fileName:TCharStr; begin OpenDataFileDlg.InitialDir:= GetCurrentDir; OpenDataFileDlg.Title:='加载模型文件'; OpenDataFileDlg.Filter := '定量模型[*.mdl]|*.mdl|定性模型[*.mdr]|*.mdr'; if OpenDataFileDlg.Execute then begin StrPCopy(FileName,OpenDataFileDlg.FileName); tmpD:=NIRSAModelForPred(graphyData,dataLength,FileName,targetName); end; if compareText(fileExt,'.MDR')=0 then begin memo1.Lines.Add('定性模型: '+ExtractFileName(FileName)); memo1.Lines.Add(Format('预测结果: %10s:%0.0f',[targetName,tmpD])); end; memo1.Lines.Add('--------------'); memo1.Lines.Add(trim(NIRSAPretreatInfor(FileName)));//调用该函数 memo1.Lines.Add('--------------'); memo1.Lines.Add(trim(NIRSAModelInfor(FileName))); end; ``` 而我现在用C#调用出现"尝试读取或写入受保护的内存。这通常指示其他内存已损坏"的错误,代码如下所示: ``` [MarshalAs(UnmanagedType.LPStr, SizeConst = 600)] public string fileName; [DllImport(@"modelDLL.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.LPStr, SizeConst = 600)] public static extern string NIRSAPretreatInfor(ref string fileName); private void preCalcButton_Click(object sender, EventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = false; if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { fileName = dialog.FileName; string result = NIRSAPretreatInfor(ref fileName); modelInfoTextBox.Text = result; } } ``` 该段代码主要参考Stack Overflow的一些解决方案,地址:[链接](https://stackoverflow.com/questions/5105460/delphi-dll-in-c-sharp-var-array-as-parameter ""),现在解决不了,没有C币了,请大神支支招,谢谢!

Delphi XE 10 如何引用dll

Delphi XE 10 中需要添加dll的引用。 在vb.net 中添加引用成功后可以在控件列表中加载dll中所带的控件,如图 ![图片说明](https://img-ask.csdn.net/upload/201510/13/1444720186_82053.png) ![图片说明](https://img-ask.csdn.net/upload/201510/13/1444720206_536924.png) Delphi XE 10 中应该如何实现

Delphi 调用C++ dll 回调函数

用Delphi 调用容联云通信的动态库CCPAppClient.DLL,其中有一个函数 Function CCPinit( CallbackInterface: CCPCALLBACKINTERFACE ):Integer;stdcall; 参数CCPCALLBACKINTERFACE 是一个结构体指针,包含 onConnected , onConnectError 等回调函数。 在调用函数CCPinit调用成功后(返回值0),会触发CCPCALLBACKINTERFACE 结构体中的回调函数onConnected 这部分代码用Delphi如何写?麻烦高手给看一下 下面是C#的demo CCPCall.instance.loginInterface = this; string ret = CCPCall.instance.LoginCCP(); if (ret != null) { MessageBox.Show(ret, "登录失败", MessageBoxButtons.OKCancel, MessageBoxIcon.Error); } else { login_btn.Enabled = false; login_btn.BackgroundImage = Resources.bluebutton_disable; login_btn.ForeColor = Color.White; login_btn.Text = "登录中...请稍后"; } public delegate void LoginDelegate(); #region ILoginInterface 成员 public void onConnected() { LoginDelegate connected = delegate() { IMDBAccess.CreateIMMessageTable(); IMDBAccess.CreateGroupNoticeTabel(); this.Hide(); new MainForm().Show(); }; this.BeginInvoke(connected); } public void onConnectError(CloopenReason reason) { LoginDelegate error = delegate() { login_btn.Enabled = true; login_btn.BackgroundImage = Resources.bluebutton_normal; login_btn.Text = "登录"; }; login_btn.BeginInvoke(error); } #endregion ```

VS2010编写的C#dll在delphi中怎么调用?在线急等!

我用C#写了一个dll给delphi调用,可是生成的程序启动不了,提示初始化失败!是什么原因啊?请教了!在线等,解决问题立刻结贴。

asp.net webservice调用Delphi的dll

asp.net webservice调用Delphi的dll,执行方法Init(连接Oracle数据库),报错连接超时。 建立个winform程序,调用Init函数可通过,但webservice就是不行。 我是发布在服务器server 2003 32位, IIS发布,发程序发布的文件扔到IIS根目录,dll文件在bin目录下。 调用的这个dll文件又调用了另一个dll,2个dll文件都扔到bin目录下了。不知道是什么原因,winform可以调用,webservice就不能调用。尝试用web程序调用,也失败了。是权限的问题?还是什么配置的问题? 尝试建立web程序调用dll,来捕获异常,但页面一直处于加载状态,任何异常都无法捕获。 以下是webservice调用dll代码: [DllImport(@"BF_CRM700.dll", EntryPoint = "CRMInit", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] static extern bool CRMInit(int fdbh); [WebMethod(Description = "初始化CRMInit")] public bool Init() { return CRMInit(1); } 谁能帮助解决下,QQ 469894973

Delphi 如何通过主程序判断显示调用的DLL已经在运行

用D7开发了一个OA办公流程DLL(挂靠在其他项目中使用),又做了一个托盘程序,登陆托盘程序后,Timer控件定时查询需审批的流程。查到流程后,右下角图标闪烁,双击调用OA办公流程DLL。现遇到一个问题,想实现的功能:打开OA流程DLL后,取消闪烁,并停止Timer;关闭DLL后,重新开启Timer(不改动DLL,只通过托盘程序判断)。求教大家有什么办法么?

vb调用DLL转成DELPHI出错?

1.原来VB的程序,经执行可以通过 VB 数据类型定义 'Profile infomation Public Type LJIF_PROFILE_INFO fXStart As Single fXPitch As Single End Type 定义 Public Declare Function LJIF_GetProfileData Lib "LJIF.dll" (ByVal ProfileTarget As Long, ByRef pProfileInfo As LJIF_PROFILE_INFO, ByRef pProfile As Single, ByVal nCount As Long) As Long 条用 rc = LJIF_GetProfileData(LJIF_HEAD_INDEX(GetProfileParam1.ListIndex), ProfileInfo, pBuffer(0), GetProfileParam2) 'Get Profile Data 2.改成DELPHI后,就这个函数提示参数错误 DELPHI 定义 Type pLJIF_PROFILE_INFO=^LJIF_PROFILE_INFO; LJIF_PROFILE_INFO=record fXStart : Single; fXPitch : Single; End ; /Get Profile Data Function LJIF_GetProfileData ( ProfileTarget:LongInt; var pProfileInfo: LJIF_PROFILE_INFO;var pProfile:array of Single; nCount :LongInt): LongInt;external 'LJIF.dll'; 调用: rc := LJIF_GetProfileData(0, ProfileInfo, pBuffer, GetProfileParam2.Value) ; 始终报参数错误? 求大侠指点!

delphi 简单dll调用出错

library wjfz; { Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. } uses shellapi, ShareMem, System.SysUtils, System.Classes; {$R *.res} function DelDirectory(X,Y:integer): integer; stdcall; begin Result :=X+Y; end; exports DelDirectory; // DelDirectory12; begin end. 这是简单的dll,求和 unit Unit2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs , shellapi, Vcl.StdCtrls; type TForm2 = class(TForm) Button1: TButton; Label1: TLabel; Label2: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} function DelDirectory(X,Y:integer): integer; stdcall; external 'wjfz.dll' ; procedure TForm2.Button1Click(Sender: TObject); begin edit3.Text:=inttostr(DelDirectory(1,2)); end; end. 用一个按钮实现1+2的和 他就报错! access violation at address......

delphi DLL数据及窗体调用

DLL工程文件代码: ``` library DLLUSERS; uses Windows, ADODB, Dialogs, Forms, SysUtils, Classes, U_DataModule in 'U_DataModule.pas' {DataModule1: TDataModule}, U_Users in 'U_Users.pas' {Frm_Users}, U_Initialize in 'U_Initialize.pas'; {$R *.res} function GetForm(ClassName: PChar; DM: TDataModule1): TFormClass; stdcall; begin DataModule1 := DM; Result:=TFormClass(FindClass(ClassName)); end; procedure InitDLL(DM: TDataModule1); stdcall; begin DataModule1:=DM; end; exports GetForm,InitDLL,SetUseName; begin end. ``` DLL公共单元代码: ``` unit U_Initialize; {DLL公共单元UNIT} interface function GetUseName: PChar; stdcall; procedure SetUseName(SName: PChar); stdcall; var StrName: PChar; implementation uses U_DataModule, ActiveX; function GetUseName: PChar; stdcall; begin Result:=StrName; end; procedure SetUseName(SName: PChar); stdcall; begin StrName:=SName; end; initialization CoInitialize(nil); DataModule1 := TDataModule1.Create(nil); finalization DataModule1.Free; CoUninitialize; end. ``` DLL数据模块代码: ``` unit U_DataModule; {数据模块} interface uses SysUtils, Classes, DB, ADODB; type TDataModule1 = class(TDataModule) ADOCNT: TADOConnection; private { Private declarations } public { Public declarations } end; var DataModule1: TDataModule1; implementation {$R *.dfm} end. ``` DLL内部窗体代码: ``` unit U_Users; {DLL内部窗体} interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DBGridEhGrouping, ComCtrls, GridsEh, DBGridEh, ExtCtrls, RzPanel, Menus, ADODB, DB, EhlibCDS, EhlibADO, Comobj, DBGridEhImpExp, U_DataModule; type TFrm_Users = class(TForm) MainMenu1: TMainMenu; mmAdd: TMenuItem; mmEdit: TMenuItem; mmDelete: TMenuItem; mmRight: TMenuItem; mmFind: TMenuItem; mmDataOut: TMenuItem; mmClose: TMenuItem; RzGroupBox1: TRzGroupBox; DBGridEhUsers: TDBGridEh; StatusBar1: TStatusBar; SaveDialog1: TSaveDialog; procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public ADOUsers,ADODelete:TADOQuery; DSUsers: TDataSource; { Public declarations } end; var Frm_Users: TFrm_Users; implementation uses U_Initialize; {$R *.dfm} procedure TFrm_Users.FormCreate(Sender: TObject); begin Font.Name:='Arial'; ADOUsers:=TADOQuery.Create(nil); ADODelete:=TADOQuery.Create(nil); DSUsers:=TDataSource.Create(nil); ADOUsers.Connection:=DataModule1.ADOCNT; ADODelete.Connection:=DataModule1.ADOCNT; //设置文件类型列表和默认文件类型 SaveDialog1.Filter:='Text files (*.txt)|*.TXT|Comma separated values (*.csv)|*.CSV|HTML file (*.htm)|*.HTM|Rich Text Format (*.rtf)|*.RTF|Microsoft Excel Workbook (*.xls)|*.XLS'; SaveDialog1.FilterIndex:=0; end; procedure TFrm_Users.FormShow(Sender: TObject); begin StrName:=GetUseName; with ADOUsers do begin Close; SQL.Clear; if String(StrName)='alsaby' then SQL.Add('select a.*,b.Person_Name,c.Partment_Name from t_User a '+ 'left join t_Person b on a.User_PersonId=b.Person_Id '+ 'left join t_Partment c on a.User_PartmentId=c.Partment_Id '+ 'order by a.User_Name') else if String(StrName)='admin' then SQL.Add('select a.*,b.Person_Name,c.Partment_Name from t_User a '+ 'left join t_Person b on a.User_PersonId=b.Person_Id '+ 'left join t_Partment c on a.User_PartmentId=c.Partment_Id '+ 'where a.User_Name<>''alsaby'' order by a.User_Name') else SQL.Add('select a.*,b.Person_Name,c.Partment_Name from t_User a '+ 'left join t_Person b on a.User_PersonId=b.Person_Id '+ 'left join t_Partment c on a.User_PartmentId=c.Partment_Id '+ 'where a.User_Name<>''alsaby'' and a.User_Name<>''admin'' order by a.User_Name'); Open; end; DSUsers.DataSet:=ADOUsers; DBGridEhUsers.DataSource:=DSUsers; StatusBar1.Panels[1].Text:=IntToStr(ADOUsers.RecordCount) +' 条数据。'; end; procedure TFrm_Users.FormClose(Sender: TObject; var Action: TCloseAction); begin ADOUsers.Close; ADOUsers.Destroy; ADODelete.Close; ADODelete.Destroy; DSUsers.Destroy; Action:=caFree; end; initialization RegisterClass(TFrm_Users); finalization UnRegisterClass(TFrm_Users); end. ``` 主程序调用代码: ``` unit U_Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ImgList, ComCtrls, ADODB, DB, jpeg, ExtCtrls, RzPanel, RzSplit, RzTreeVw, U_DataModule; type TInitDLL = procedure(DM: TFrm_DataModule); stdcall; TSetUseName = procedure(SName: PChar); stdcall; TGetForm = function(ClassName: PChar; DM: TFrm_DataModule): TFormClass; stdcall; TFrm_Main = class(TForm) MainMenu1: TMainMenu; mmSysFlies: TMenuItem; mmUserChange: TMenuItem; N2: TMenuItem; mmExit: TMenuItem; N1: TMenuItem; mmBakRecover: TMenuItem; mmSysUser: TMenuItem; N5: TMenuItem; StatusBar1: TStatusBar; OpenDialog1: TOpenDialog; ImageList1: TImageList; procedure FormCreate(Sender: TObject); procedure mmSysUserClick(Sender: TObject); private { Private declarations } public UName: String; { Public declarations } end; var Frm_Main: TFrm_Main; implementation uses U_Public; {$R *.dfm} procedure TFrm_Main.FormCreate(Sender: TObject); begin Font.Name:='Arial'; UName:=Frm_DataModule.ADO_User.FieldByName('User_Name').AsString; end; procedure TFrm_Main.mmSysUserClick(Sender: TObject); var DLLName: String; DLLHandle: THandle; FarProc: TFarProc; Form: TForm; SetUseName: TSetUseName; GetForm: TGetForm; InitDLL: TInitDLL; begin GetDir(0,DLLName); DLLName := DLLName + '\DLLUSERS.dll'; DLLHandle:= SafeLoadLibrary(DLLName); if DLLHandle > 0 then Try FarProc := GetProcAddress(DLLHandle, 'InitDLL'); if FarProc<>nil then begin InitDLL := TInitDLL(FarProc); InitDLL(Frm_DataModule); end; FarProc := GetProcAddress(DLLHandle, 'SetUseName'); if FarProc<>nil then begin SetUseName := TSetUseName(FarProc); SetUseName(PChar(Trim(UName))); end; FarProc := GetProcAddress(DLLHandle, 'GetForm'); if FarProc<>nil then begin GetForm := TGetForm(FarProc); Form := GetForm('TFrm_Users', Frm_DataModule).Create(nil); Form.ShowModal; FreeAndNil(Form); end; Finally FreeLibrary(DLLHandle); End else ShowMessage(DLLName+'文件不存在!'); end; end. ``` 以上在运行程序时没有错误,数据也正常显示,但是关闭调用的DLL内部窗体后,再次通过主程序调用就出现了Read of Address 00000008错误,请高手指点这是咋回事?

替换Delphi中调用的dll

在一段Delphi编写的dll中调用了另外一个一个A.dll,现在想将这个A.dll替换为自己写的B.dll。只是知道A大概的功能,B是自己写的,中间需要注意些什么?

Delphi 调用C++调用Dll问题

C++ Dll里面定义的函数头/*COMMON_LIB_API unsigned long __stdcall cmm_DESDecrypt( unsigned char *Key,__int16 KeyLen, unsigned char *Source, unsigned long SrcLen, unsigned char *result, __int16 PadMode /*= COMMON_LIB_DES_PAD_00*/ 请问Delphi 里面要怎么定义函数头

Delphi的DLL中的声明的类型的问题

假如我在DLL中新定义了一个类,并且声明了 一个变量,那么我在加载这个DLL的程序中想要使用这个变量,需不需要重新将对应类型声明再在这个程序的源码文件中再声明一遍? 就是怎么能让DLL中定义的新的数据类型也在加载它的程序中使用?

delphi 可以调用cximageu.dll吗?利用cximageu.dll里的函数进行图片压缩?

cximageu.dll是C++写的,我想用delphi调用这个DLL来压缩图片,可以吗,高手帮忙看看? 能不能给个代码参考,谢谢!

jna调用dll,如何获取lpstr类型的传出参数

dll中函数的描述 ``` function SendRcvB(pDataInput: LPSTR; iDataInputLen: LongInt; pDataOutput: LPSTR; iDataOutputLen: LongInt): LongInt; stdcall; pDataInput:传入参数,SSSS...ZZZZ iDataInputLen:传入参数的长度 pDataOutput: 传出参数,RRRR...ZZZZ iDataOutputLen:传出参数的长度 返回值:0:正常;-1:连接错误;-9:传入消息错误或者获取配置错误 ``` jna中对应的定义 ``` public String SendRcvB(String pDataInput,Integer iDataInputLen,String pDataOutput,Integer iDataOutputLen); ``` 看到调用需要给 传出参数分配内存空间,java应该怎么写呢定义一个空的byte数组吗? 里边只给了Delphi的例子 GetMem(pDataOutput, 4096); 请问这个用java怎么写

C语言编写DLL,返回字符串以\0结束符结尾

C语言编写DLL,其中一个函数返回字符串以\0结束符结尾(abc\0),用VB调用DLL的时候返回的字符串因为带\0,len()方法计算字符串长度为实际长度+1,也就是\0结束符被当作字符计算了,在VB中可以用replace("字符串",Chr(0),"")来处理。 现在我是想VB 不处理,而C编写的DLL返回字符串不带\0结束符,请问怎么办? 我用delphi编写的DLL,调用返回的正常。

Delphi DLL数据及窗体调用

DLL工程相关代码如下: library DLLUSERS; uses Windows, ADODB, Dialogs, Forms, SysUtils, Classes, U_DataModule in 'U_DataModule.pas' {DataModule1: TDataModule}, U_Users in 'U_Users.pas' {Frm_Users}, U_Initialize in 'U_Initialize.pas'; {$R *.res} function GetForm(ClassName: PChar; DM: TDataModule1): TFormClass; stdcall; begin DataModule1 := DM; Result:=TFormClass(FindClass(ClassName)); end; procedure InitDLL(DM: TDataModule1); stdcall; begin DataModule1:=DM; end; exports GetForm,InitDLL,SetUseName; begin end. DLL公共单元代码如下: unit U_Initialize; {DLL公共单元UNIT} interface function GetUseName: PChar; stdcall; procedure SetUseName(SName: PChar); stdcall; var StrName: PChar; implementation uses U_DataModule, ActiveX; function GetUseName: PChar; stdcall; begin Result:=StrName; end; procedure SetUseName(SName: PChar); stdcall; begin StrName:=SName; end; initialization CoInitialize(nil); DataModule1 := TDataModule1.Create(nil); finalization DataModule1.Free; CoUninitialize; end. DLL数据模块代码: unit U_DataModule; {数据模块} interface uses SysUtils, Classes, DB, ADODB; type TDataModule1 = class(TDataModule) ADOCNT: TADOConnection; private { Private declarations } public { Public declarations } end; var DataModule1: TDataModule1; implementation {$R *.dfm} end. DLL内部窗体代码: unit U_Users; {DLL内部窗体} interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DBGridEhGrouping, ComCtrls, GridsEh, DBGridEh, ExtCtrls, RzPanel, Menus, ADODB, DB, EhlibCDS, EhlibADO, Comobj, DBGridEhImpExp, U_DataModule; type TFrm_Users = class(TForm) MainMenu1: TMainMenu; mmAdd: TMenuItem; mmEdit: TMenuItem; mmDelete: TMenuItem; mmRight: TMenuItem; mmFind: TMenuItem; mmDataOut: TMenuItem; mmClose: TMenuItem; RzGroupBox1: TRzGroupBox; DBGridEhUsers: TDBGridEh; StatusBar1: TStatusBar; SaveDialog1: TSaveDialog; procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public ADOUsers,ADODelete:TADOQuery; DSUsers: TDataSource; { Public declarations } end; var Frm_Users: TFrm_Users; implementation uses U_Initialize; {$R *.dfm} procedure TFrm_Users.FormCreate(Sender: TObject); begin Font.Name:='Arial'; ADOUsers:=TADOQuery.Create(nil); ADODelete:=TADOQuery.Create(nil); DSUsers:=TDataSource.Create(nil); ADOUsers.Connection:=DataModule1.ADOCNT; ADODelete.Connection:=DataModule1.ADOCNT; //设置文件类型列表和默认文件类型 SaveDialog1.Filter:='Text files (*.txt)|*.TXT|Comma separated values (*.csv)|*.CSV|HTML file (*.htm)|*.HTM|Rich Text Format (*.rtf)|*.RTF|Microsoft Excel Workbook (*.xls)|*.XLS'; SaveDialog1.FilterIndex:=0; end; procedure TFrm_Users.FormShow(Sender: TObject); begin StrName:=GetUseName; with ADOUsers do begin Close; SQL.Clear; if String(StrName)='alsaby' then SQL.Add('select a.*,b.Person_Name,c.Partment_Name from t_User a '+ 'left join t_Person b on a.User_PersonId=b.Person_Id '+ 'left join t_Partment c on a.User_PartmentId=c.Partment_Id '+ 'order by a.User_Name') else if String(StrName)='admin' then SQL.Add('select a.*,b.Person_Name,c.Partment_Name from t_User a '+ 'left join t_Person b on a.User_PersonId=b.Person_Id '+ 'left join t_Partment c on a.User_PartmentId=c.Partment_Id '+ 'where a.User_Name<>''alsaby'' order by a.User_Name') else SQL.Add('select a.*,b.Person_Name,c.Partment_Name from t_User a '+ 'left join t_Person b on a.User_PersonId=b.Person_Id '+ 'left join t_Partment c on a.User_PartmentId=c.Partment_Id '+ 'where a.User_Name<>''alsaby'' and a.User_Name<>''admin'' order by a.User_Name'); Open; end; DSUsers.DataSet:=ADOUsers; DBGridEhUsers.DataSource:=DSUsers; StatusBar1.Panels[1].Text:=IntToStr(ADOUsers.RecordCount) +' 条数据。'; end; procedure TFrm_Users.FormClose(Sender: TObject; var Action: TCloseAction); begin ADOUsers.Close; ADOUsers.Destroy; ADODelete.Close; ADODelete.Destroy; DSUsers.Destroy; Action:=caFree; end; initialization RegisterClass(TFrm_Users); finalization UnRegisterClass(TFrm_Users); end. 主程序调用DLL代码: unit U_Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ImgList, ComCtrls, ADODB, DB, jpeg, ExtCtrls, RzPanel, RzSplit, RzTreeVw, U_DataModule; type TInitDLL = procedure(DM: TFrm_DataModule); stdcall; TSetUseName = procedure(SName: PChar); stdcall; TGetForm = function(ClassName: PChar; DM: TFrm_DataModule): TFormClass; stdcall; TFrm_Main = class(TForm) MainMenu1: TMainMenu; mmSysFlies: TMenuItem; mmUserChange: TMenuItem; N2: TMenuItem; mmExit: TMenuItem; N1: TMenuItem; mmBakRecover: TMenuItem; mmSysUser: TMenuItem; N5: TMenuItem; StatusBar1: TStatusBar; OpenDialog1: TOpenDialog; ImageList1: TImageList; procedure FormCreate(Sender: TObject); procedure mmSysUserClick(Sender: TObject); private { Private declarations } public UName: String; { Public declarations } end; var Frm_Main: TFrm_Main; implementation uses U_Public; {$R *.dfm} procedure TFrm_Main.FormCreate(Sender: TObject); begin Font.Name:='Arial'; UName:=Frm_DataModule.ADO_User.FieldByName('User_Name').AsString; end; procedure TFrm_Main.mmSysUserClick(Sender: TObject); var DLLName: String; DLLHandle: THandle; FarProc: TFarProc; Form: TForm; SetUseName: TSetUseName; GetForm: TGetForm; InitDLL: TInitDLL; begin GetDir(0,DLLName); DLLName := DLLName + '\DLLUSERS.dll'; DLLHandle:= SafeLoadLibrary(DLLName); if DLLHandle > 0 then Try FarProc := GetProcAddress(DLLHandle, 'InitDLL'); if FarProc<>nil then begin InitDLL := TInitDLL(FarProc); InitDLL(Frm_DataModule); end; FarProc := GetProcAddress(DLLHandle, 'SetUseName'); if FarProc<>nil then begin SetUseName := TSetUseName(FarProc); SetUseName(PChar(Trim(UName))); end; FarProc := GetProcAddress(DLLHandle, 'GetForm'); if FarProc<>nil then begin GetForm := TGetForm(FarProc); Form := GetForm('TFrm_Users', Frm_DataModule).Create(nil); Form.ShowModal; FreeAndNil(Form); end; Finally FreeLibrary(DLLHandle); End else ShowMessage(DLLName+'文件不存在!'); end; end. ``` ``` 以上第一次运行数据都是可以正确显示的,可是关闭调用出来的DLL内部窗体后,再次调用就出现错误了,错误提示为Read of address 00000008,这是为什么呢?

java使用JNI调用的dll依赖于其它dll路径该如何配置

jni调用dll扩展程序直接配置-Djava.library.path来指定dll所在目录即可以加载到dll,但是如果dll要依赖其它dll的时候会提示 Can't find dependent librarie即找不到dll的依赖库,这种情况可以将需要依赖的dll放到项目根目录下或者jdkbin目录下解决,但是想要导出jar包供其它调用就不行了,而且这种解决方法也不适用,总不能每次调用都把dll文件复制到根目录下,这时该如何处理?

VB编写标准DLL实现DELPHI DLL报内存错误

求助各位大神,有个delphi7写的标准DLL,我需要用VB6实现,形式如下 //虚假实现 function WriteCard(StrCardNo: Pchar): Integer; stdcall; begin Result := 0; end; //虚假实现 function ReadCard(StrCardNo: Pchar): Integer; stdcall; begin StrPCopy(StrCardNo, '12345678'); Result := 0; end; 因为要采用标准DLL,非ActiveX dll,从网上找了相关方法,我的测试方法如下: 1。ThirdPartWriteReadCard.dll这个是要实现的DLL,厂家给出DELPHI源码,即编译后的DLL 2。ClientPrj.exe厂家贴心给出了测试DEMO,用来测试调用DLL,显示返回值 3。我在VB里做了DEMO实现,如下,一切正常 Option Explicit Private Declare Function WriteCard Lib "ThirdPartWriteReadCard.dll" (ByVal StrCardNo As String) As Long Private Declare Function ReadCard Lib "ThirdPartWriteReadCard.dll" (ByVal StrCardNo As String) As Long Private Sub Command1_Click() On Error GoTo err Dim StrCardNo As String StrCardNo = Space$(255) If ReadCard(StrCardNo) <> 0 Then MsgBox "error" ' strCardNo = StringFromPtr(StrPtr(strCardNo)) MsgBox "卡号:" + StrCardNo + "。" Exit Sub err: MsgBox err.Description End Sub 4。开始写VB版DLL,并编译为标准DLL,非COM Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, ByVal Source As Any, ByVal Length As Long) ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Private Sub Main(): End Sub '请不要修改或删除这一行!!! ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '在这后面写上你的其它 Sub/Function ,或者全部写到其它模块中 '//虚假实现 Public Function ReadCard(ByVal lpCardNo As Long) As Long ReadCard = 0 Dim curCardNo As String curCardNo = "bb22303**230304" CopyMemory ByVal lpCardNo, ByVal curCardNo, LenB(curCardNo) '====上面代码VB DEMO可以获取字符串,delphi报 vbmsvm60.dll内存写错误 End Function

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Intellij IDEA 实用插件安利

1. 前言从2020 年 JVM 生态报告解读 可以看出Intellij IDEA 目前已经稳坐 Java IDE 头把交椅。而且统计得出付费用户已经超过了八成(国外统计)。IDEA 的...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

魂迁光刻,梦绕芯片,中芯国际终获ASML大型光刻机

据羊城晚报报道,近日中芯国际从荷兰进口的一台大型光刻机,顺利通过深圳出口加工区场站两道闸口进入厂区,中芯国际发表公告称该光刻机并非此前盛传的EUV光刻机,主要用于企业复工复产后的生产线扩容。 我们知道EUV主要用于7nm及以下制程的芯片制造,光刻机作为集成电路制造中最关键的设备,对芯片制作工艺有着决定性的影响,被誉为“超精密制造技术皇冠上的明珠”,根据之前中芯国际的公报,目...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

百度工程师,获利10万,判刑3年!

所有一夜暴富的方法都写在刑法中,但总有人心存侥幸。这些年互联网犯罪高发,一些工程师高技术犯罪更是引发关注。这两天,一个百度运维工程师的案例传遍朋友圈。1...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《Oracle Java SE编程自学与面试指南》最佳学习路线图2020年最新版(进大厂必备)

正确选择比瞎努力更重要!

字节跳动面试官竟然问了我JDBC?

轻松等回家通知

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

实时更新:计算机编程语言排行榜—TIOBE世界编程语言排行榜(2020年6月份最新版)

内容导航: 1、TIOBE排行榜 2、总榜(2020年6月份) 3、本月前三名 3.1、C 3.2、Java 3.3、Python 4、学习路线图 5、参考地址 1、TIOBE排行榜 TIOBE排行榜是根据全世界互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube统计出排名数据。

立即提问
相关内容推荐