首先说明在Delphi中实现一段小功能是非常快捷的,具体应用场景我就不编了,抽象点吧:
type
IOutIntf = interface
function A(name: PAnsiChar): Integer; stdcall;
procedure B; stdcall;
end;
在DLL中导出函数
procedure GetImpl(out impl: IOutIntf); stdcall;
接下来说明在C++中调用这个delphi实现的接口,首先在C++中定义一个导出函数原型:
typedef void(__stdcall *GetImpl)(IOutIntf*&);
//C++没有out关键字,用*&代替
一、接下来在C++中调用IOutIntf接口
#pragma once
#include <Unknwn.h>
class OutIntf: public IUnknown
{
public:
virtual int __stdcall A(char*)=0;
virtual void __stdcall B()=0;
}
剩下的就简单了:动态加载DLL,获取方法地址,执行方法:
HMODULE hLib = LoadLibrary("xxxx.dll");
GetImpl FuncLoad = (GetImpl)GetProcAddress(hLib, "GetImpl");
OutIntf* impl;//只能声明为指针
FuncLoad(impl);
impl->A("haha");
impl->B();
2、在C#中实现和调用(有空再写)