Dll for VC(100分)

  • 主题发起人 主题发起人 cz__1
  • 开始时间 开始时间
C

cz__1

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi5.0做的DLL,为什么在VC6.0中不能调用?
 
格式问题!?
 
可以做一个最简单的DLL试试.
 
请继续或结束
 
参数调用顺序问题
 
在Delphi写的Dll中的函数后要加上stdcall
再VC中声明这函数前面要加上 __stdcall 因为VC缺省是__cdcel
就是保持调用规范一制!
 
编译开关/Gz
 
假设:delphi动态库实现一个add(x,y)从x加到y,步长为1。
function add(x:UINT; y:UINT):UINT; cdecl export;
var
i : UINT;
begin
result := 0;
for i := x to y do
result := result + i;
end;

Exports
add;
这里用VC++6.0调用:
#include <windows.h>
#include <iostream.h>

HINSTANCE gLibCaculate = NULL;
typedef UINT (*ADD)(UINT x, UINT y);
ADD add;

void main()
{
// 装载动态库
gLibCaculate = LoadLibrary("Project2.dll");
if (gLibCaculate == NULL)
{
cout << "装载动态库Project2.dll失败!" << endl;
return;
}

//返回DLL中add()函数的地址
add = (ADD)GetProcAddress(HMODULE(gLibCaculate),"add");
if (FARPROC(add) == FARPROC(NULL))
{
cout << "动态库Project2.dll没有add()函数!" << endl;
}
else
{
cout << " add from 1 to 100 is " << add(1, 100) << endl;
}
// 释放动态库
FreeLibrary(gLibCaculate);
}
 
接受答案了.
 
后退
顶部