有一个用 C++ 编写并编译为 DLL 的函数,我想在我的 Delphi 应用程序中使用它。
刮板.cpp:
SCRAPER_API bool ScraperGetWinList(SWin winList[100])
{
iCurrWin=0;
memset(winList,0,100 * sizeof(SWin));
return EnumWindows(EnumProcTopLevelWindowList, (LPARAM) winList);
}
刮板.h:
#ifdef SCRAPER_EXPORTS
#define SCRAPER_API __declspec(dllexport)
#else
#define SCRAPER_API __declspec(dllimport)
#endif
struct SWin
{
char title[512];
HWND hwnd;
};
extern "C" {
SCRAPER_API bool ScraperGetWinList(SWin winList[100]);
}
这就是我在Delphi 应用程序中声明函数的方式:
type
tWin = record
Title: Array [0..511] of Char;
hWnd: HWND;
end;
tWinList = Array [0..99] of tWin;
function ScraperGetWinList(var WinList: tWinList): Boolean; stdcall; external 'Scraper.dll';
该功能有效,但是当它完成时,我收到调试器故障通知:项目 ... 出现错误消息:''在 0x0012f773 的访问冲突:写入地址 0xffffffc0'。进程停止。使用 Step 或 Run 继续。
如果我在 Scraper.cpp 和 Scraper.h 中添加__stdcall
(后SCRAPER_API bool
),则 Delphi 应用程序根本无法启动:过程入口点 ScraperGetWinList 无法位于动态链接库 Scraper.dll 中。