如何在.NET中调用普通C++或C语言写的DLL的API函数

Python06

如何在.NET中调用普通C++或C语言写的DLL的API函数,第1张

一 调用静态载入

1 客户端函数声名:

1)笮⌒疵舾小?br />

2)与DLL中的声明一样。

如: showform(form:Tform)Farexternal\'yproject_dll.dll\'

3)调用时传过去的参数类型最好也与windows c++一样。

4)调用时DLL必须在windows搜索路径中,顺序是:当前目录;Path路径;windowswidowswindows

二 调用动态载入

1 建立一种过程类型[如果你对过程类型的变量只是一个指针的本质清楚的话,你就知道是怎么回事了]。如:

type

mypointer=procedure(form:Tform)Farexternal

var

Hinst:Thandle

showform:mypointer

begin

Hinst:=loadlibrary(\'yproject_dll\')//Load一个Dll,按文件名找。

showform:=getprocaddress(Hinst,\'showform\')//按函数名找,大小写敏感。如果你知道自动化对象的本质就清楚了。

showform(application.mainform)//找到函数入口指针就调用。

Freelibrary(Hinst)

end

这是我以前的回答,是个两数加法的例子,看了就明白了

你的dll不必用h头文件,你用的是显式声明导出函数

vc在显式声明函数时会出现与vb不匹配的问题,他会把函数名改了,你必须用隐式声明,就是def文件声明才可以。

你的cpp里直接写

int __stdcall add(int a, int b)

{

return (a+b)

}

然后再在工程里添加一个文本文件,注意,文件名是 makedll(如果不对就是工程名).def

里面写

LIBRARY makedll

EXPORTS

add @1

然后保存

编译、连接

得到的dll就是vb可以调用的了

vb里呢,不用怎么改

如下

Public Declare Function add Lib "makedll.dll" (ByVal a As Integer,ByVal b As Integer) As Integer

Private Sub Command1_Click()

Dim c As Integer

c = add(1, 2)

MsgBox c

End Sub

这有就应该没问题了