我已經搜索了周圍的Stackoverflow我遇到的問題,但他們都是非常具體的特定訪問衝突。模塊'MpLib.dll'中地址爲003B0E8E的訪問衝突。閱讀地址00120BF4
我認爲我遇到的一段代碼是一個叫做MpqExtractFile
的函數,存儲在一個DLL中。
功能:
function MpqExtractFile(var hMPQ: Integer; szToExtract, szExtracted: AnsiString): Boolean; stdcall; external 'MpqLib.dll' name 'B2';
電話:
if MpqExtractFile(hMPQ, 'war3map.j', AnsiString(tempDir+'\war3map.j')) = True
then ShowMessage('Success.')
else ShowMessage('Failed.');
在此代碼的執行我的應用程序拋出的訪問衝突錯誤,因此ShowMessage
不顯示在所有。
我不確定上述情況是否足以估計出問題所在,但如果還有其他問題,請告訴我。
編輯
這是VB.NET源代碼的摘錄,我已經解釋:
Declare Function MpqExtractFile Lib "MpqLib.dll" Alias "B2" (ByVal hMPQ As Integer, ByVal szToExtract As String, ByVal szExtracted As String) As Boolean
我顯然不熟悉其他語言的聲明,但我發現下面的函數在聲明VB函數的同一個VB文件中。
BOOL WINAPI MpqExtractFile(HANDLE hMpq, const char * szToExtract, const char * szExtracted);
謝謝先進!
如何在DLL中聲明「B2」? DLL編碼的語言是什麼 - 如果它不是Delphi,那麼'AnsiString'將不會工作,通常你需要使用PAnsiChar。 –
它是如何聲明的?我不確定。我相信DLL是用C++編碼的。我現在會嘗試一下,看看它是否有所作爲。 – ple103
如果在C或C++中,如果使用UTF-16,它肯定會是PAnsiChar或PChar。 Delphi AnsiString是一個非常不同的野獸。 –