的Win32 API ::一個函數被調用與錯誤原型並引起了C堆棧一致性EBP = 18fde0 ESP = 18fdd0
下面是的Perl和C代碼
my $CheckSqlAnyWindow = new Win32::API($dllfile,
"CheckSqlAnyWindow", [ 'N', 'P', 'P' ], 'N');
my $hwndSqlany = pack("L", 0);
my ($i, $sqlanyWinId);
START:
for ($i = 0; $i < $numRetries; $i++)
{
$rc = $CheckSqlAnyWindow->Call($procId,"$engine - Adaptive Server Anywhere - 12.0.1 (3817)", $hwndSqlany);
if ($rc <= 0)
{
$Cisco::DbUtils::errstr = Win32::FormatMessage(Win32::GetLastError());
return 1;
}
}
C編碼
BOOL CheckSqlAnyWindow(DWORD pid, char *winTitle, DWORD * hwnd)
{
StartDbInfo startDbBuf;
BOOL rc;
startDbBuf.pid = pid;
startDbBuf.hwnd = NULL;
strcpy(startDbBuf.winTitle, winTitle);
rc = EnumWindows((WNDENUMPROC) getWindowId, (LPARAM) &startDbBuf);
memcpy((DWORD *) hwnd, (DWORD *) &startDbBuf.hwnd, sizeof(DWORD));
return (TRUE);
}
任何人都可以指出要在這裏完成的更正嗎?
嘗試'WINAPI'或'__stdcall'在當在C代碼中沒有指定的調用約定在你的C函數 –