调用Delphi编写的DLL问题,请大家帮忙看看。
我用C++和C#调用都报错,用Delphi调用没问题(DLL不是我们开发的没办法改),请大家帮忙看看;DoorIntf.dll 提取码:1234
目录
Delphi接口定义
//定义创建访问IDDB接口对象的抽象工厂接口
IDoorIntfFactory = interface(IInterface)
['{F573C1C3-E0FD-44F4-8A32-4337B2FCF680}']
function CreateDDB(_host: wideString; _port: Integer): IDoorIntf; stdcall;
end;
Delphi调用
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,uDoorIntf;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
factory: IDoorIntfFactory;
db: IDoorIntf;
protected
public
{ Public declarations }
end;
var
Form1: TForm1;
const
commdb = 'DoorIntf.dll'; //动态库路径
var
aLib: THandle;
function CoDoorIntfFactory: IDoorIntfFactory; stdcall;
procedure DoDoorIntfFactory; stdcall;
function CoDoorIntfFactory;stdcall external commdb;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var ip:string;
begin
ip:='127.0.0.1';
factory := CoDoorIntfFactory;
db := factory.CreateDDB(ip, 10);
if db.ping then
begin
MessageBox(0, '连接成功', '系统提示', MB_OK);
end
else
begin
MessageBox(0, '连接失败', '系统提示', MB_OK);
end;
end;
end.
C++接口定义
[uuid("F573C1C3-E0FD-44F4-8A32-4337B2FCF580")]
__interface IDoorIntfFactory{
virtual IDoorIntf* __stdcall CreateDDB(BSTR _host, Int32 _port) = 0;
};
C++调用
typedef IDoorIntfFactory*(__stdcall *CoDoorIntfFactory)();//函数原型
HINSTANCE hDllInst = LoadLibrary(L"DoorIntf.dll");
if (hDllInst != NULL) {
{
BSTR bstr = ::SysAllocString(L"127.0.0.1");
long nRes;
IDoorIntfFactory* Ifactory = NULL;
CoDoorIntfFactory Cfactory = (CoDoorIntfFactory)GetProcAddress(hDllInst, "CoDoorIntfFactory");
if (Cfactory)
{
Ifactory=Cfactory();//这里报错
if (NULL != Ifactory)
{
Ifactory->CreateDDB(bstr, 2);
}
}
}
}
...全文
相关推荐
编译simulink dll
介绍如何利用matlab将simulink编译成dll的形式,供vc,vb,c#调用
Delphi 调用 rust 编写的 DLL 文件
Delphi 是一种基于对象的、可视化的、事件驱动的编程语言,它可以用来开发各种 Windows 应用,如桌面软件、数据库系统、网络服务等。delphi 支持调用外部的 DLL 文件,以实现与其他语言或库的互操作。rust 是一种现代的、高性能的、安全的编程语言,它可以用来开发各种应用,如操作系统、网络服务、游戏、嵌入式系统等。rust 也支持编写和导出 DLL 文件,以提供给其他语言或程序调用。这样,你就完成了在 Delphi 中调用 rust 编写的 DLL 文件的过程。
使用Delphi调用C++编写的DLL
1、C++编写的DLL代码如下:该Dll的功能比较简单,就是实现一个整数加法;IAddBase 是一个抽象类,IAdd实现了IAddBase的方法,并采用了单例模式;GetAddInstance()为dll对外的接口,返回一个IAdd的对象指针;调用者使用该实例就可以调用Add方法class IAddBase{public: int virtual __
delphi调用C# DLL
delphi调用C# DLL
Delphi 几种常见的Dll调用方法l
Delphi7 调用DLL几种常见的方法源码。



