简单的做测试,新建了一个win32的控制台程序,调用delphi写的dll,运行没什么错,但是没结果,断点发现加载LoadLibrary的时候句柄没有找到,如下:
#include "stdafx.h"
#include "windows.h"
typedef int (*Add)(int b,int c);int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hDll;
int a=0;
Add add;
hDll = LoadLibrary((LPCWSTR)("d:\\Pdll.dll"));
if (hDll != NULL)
{
printf("success1!\n");
add = (Add)GetProcAddress(hDll,"Add");
if(add!=NULL)
{
printf("success2!");
a=add(1,3);
if(a==4) {
printf("4");
}
}
FreeLibrary(hDll);
}
return 0;
}dll文件可以用的,我用别的语言调用过的,没有问题。就是vc调用的时候hDll = LoadLibrary((LPCWSTR)("d:\\Pdll.dll")); 发现这里hdll的值为0x00000000。是什么问题?
#include "stdafx.h"
#include "windows.h"
typedef int (*Add)(int b,int c);int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hDll;
int a=0;
Add add;
hDll = LoadLibrary((LPCWSTR)("d:\\Pdll.dll"));
if (hDll != NULL)
{
printf("success1!\n");
add = (Add)GetProcAddress(hDll,"Add");
if(add!=NULL)
{
printf("success2!");
a=add(1,3);
if(a==4) {
printf("4");
}
}
FreeLibrary(hDll);
}
return 0;
}dll文件可以用的,我用别的语言调用过的,没有问题。就是vc调用的时候hDll = LoadLibrary((LPCWSTR)("d:\\Pdll.dll")); 发现这里hdll的值为0x00000000。是什么问题?
function add(b:integer;c:integer):longint cdecl 话,这里应写成“typedef int __cdecl(*Add)(int b,int c); ”;如果delphi中cdecl换成stdcall,这里应是“typedef int __stdcall(*Add)(int b,int c); ”,反正要对应。你试试吧!