我想从具有许多依赖DLL的DLL中调用几个API。我将所有DLL添加到安装程序包并定义了原型:
function myapi_Init(): Integer;
external 'myapi_init@A.dll stdcall setuponly loadwithalteredsearchpath delayload';
我在ExtractTemporaryFiles('*.dll')
中使用InitializeSetup()
提取所有DLL,然后尝试调用相应的API。我收到运行时错误,无法导入dll ......
我重新定义了原型如下并删除了提取DLL的调用:
function myapi_Init(): Integer;
external 'myapi_init@files:A.dll,B.dll,C.dll,D.dll,E.dll stdcall setuponly loadwithalteredsearchpath delayload';
这很好用。我检查了两种情况,所有适当的DLL都被提取出来并放在同一个地方。我更喜欢第一种情况,因为它避免拼写出每个API的所有DLL名称。在第一种导致失败的情况下我做错了什么?