在设置命名方法之前 使用__declspec(dllimport)
a 。__imp__
在生成的 delphiCheckFunctions.dll
中只有一个名为CheckResult
.
VS C++ 2010 正在寻找__imp__CheckResult
. 因此,链接器 VS C++ 找不到这个函数。
您必须创建一个 .lib 文件。
使用该程序lib.exe
可以很容易地创建这个 .lib 文件。
从 Visual-studio 命令提示符运行 LIB.exe。
LIB 创建标准库、导入库和导出文件,您可以在构建程序时使用 LINK。
LIB 概述
如果我们已经创建,使用 Visual-studio 命令提示符>
C:\VisualStudio100\VC>lib /def:C:\CheckFunctions.def /OUT:C:\CheckFunctions.lib
该CheckFunctions.lib
文件__imp__CheckResult
可以找到。
您可以使用 Delphi5 和 Win xp 32按照以下步骤对其进行测试,它可以正常工作。
CheckFunctions.dpr
library CheckFunctions;
uses
SysUtils,
Classes;
{$R *.RES}
function CheckResult:integer; stdcall;
begin
result:=12000;
end;
exports
CheckResult;
begin
end.
创建 def 文件
CheckFunctions.def
EXPORTS
CheckResult
创建 lib 文件
Visual Studio 命令
C:\Programme\VisualStudio100\VC>lib /def:C:\pathToProject\CheckFunctions.def /OUT:C:\pathToProject\CheckFunctions.lib
复制CheckFunctions.exp
到您CheckFunctions.lib
的
Visual C++ 2010 项目文件夹
Visual C++ 2010 CallDll.cpp
#include "stdafx.h"
#define MY_DLL __declspec(dllimport)
extern "C"
{
MY_DLL int CheckResult();
} ;
int _tmain(int argc, _TCHAR* argv[])
{
int myint = CheckResult();
printf ("Decimals: %d \n", myint );
return 0;
}
更新:
如果你想用 __stdcall
新的 Visual C++ 2010 CallDll.cpp
#include "stdafx.h"
#define MY_DLL __declspec(dllimport)
extern "C"
{
MY_DLL int __stdcall CheckResult();
} ;
int _tmain(int argc, _TCHAR* argv[])
{
int myint = CheckResult();
printf ("Decimals: %d \n", myint );
return 0;
}
更改德尔福出口
exports
CheckResult name 'CheckResult@0';
更改
CheckFunctions.def
EXPORTS
CheckResult@0
- 创建一个新的 CheckFunctions.lib
这也有效。