代碼如下:
//---------------------------------------------------------------------------
void __fastcall TForm1::btn1Click(TObject *Sender)
{
AnsiString sCheckID1="sdfgdfgsdfgasdf";
char zxResult[400] ;
HINSTANCE DLL_EMSInfo = NULL;
DLL_EMSInfo =::LoadLibrary("EMSInfo.dll");
void __stdcall (*CheckEMS)(char*,char*);
CheckEMS=( void (__stdcall*) (char*,char*) )GetProcAddress(DLL_EMSInfo,"CheckEMS");
CheckEMS(sCheckID1.c_str(),zxResult);
FreeLibrary(DLL_EMSInfo);
AnsiString result1 = zxResult;
ShowMessage(result1);
}
運行DLL_EMSInfo =::LoadLibrary("EMSInfo.dll");
報錯First chance exception at $7C812FD3. Exception class EOleSysError with message '尚未呼叫 CoInitialize。'. Process Project1.exe (2520)
不知道是怎么回事,各位大俠提點一下小弟我
uj5u.com熱心網友回復:
告訴你一個更加簡單的辦法,不需要動態引入,只要在cpp檔案的開始出引入這樣一句話,#pragma comment(lib, "EMSInfo.lib")在這之前你需要用BCB的一個工具將DLL生成lib檔案 在dll檔案的目錄小 運行CMD 然后 implib EMSInfo.lib EMSInfo.dll 然后就生成了。就可以了直接呼叫sdk里面的函式了。
uj5u.com熱心網友回復:
老板誰要用動態的…………
uj5u.com熱心網友回復:
是不是在DLL中使用了COM?不行就在程式開始的時候呼叫一下,比如
if ( CoInitialize(NULL) != S_OK ) {
ShowError();
.....
}
uj5u.com熱心網友回復:
在工程中加入*.Lib,將Dll放在可執行檔案目錄下uj5u.com熱心網友回復:
你用哪個loadlibary呼叫就是每次使用的時候動態引入啊。
uj5u.com熱心網友回復:
注意,BC的庫和VC的庫LIB和頭檔案都能不同!uj5u.com熱心網友回復:
初始化com是沒有問題,但是初始化之后DLL_EMSInfo =::LoadLibrary("EMSInfo.dll");這一句就執行不下去了,就一直停在那里
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/156771.html
標籤:基礎類
