代碼:調用DLL函數問題
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
void calldll();
int main(int argc, char *argv[])
{
calldll();
system("PAUSE");
return EXIT_SUCCESS;
}
void calldll()
{
HINSTANCE LoadMe;
LoadMe = LoadLibrary("Trans_ATL.dll");
if(LoadMe!=0)
cout<<"loaded successfully\n";
else
cout<<"loading error\n";
/* get pointer to the functions in the dll*/
FARPROC function01 = GetProcAddress(LoadMe,"EnableLastCharTashkeel");
FARPROC function02 = GetProcAddress(LoadMe,"EnableEmphaticLAM_RAA");
FARPROC function03 = GetProcAddress(LoadMe,"SetText");
FARPROC function04 = GetProcAddress(LoadMe,"GetResult");
typedef void (__stdcall * pICFUNC01)(bool);
typedef void (__stdcall * pICFUNC02)(bool);
typedef bool (__stdcall * pICFUNC03)(string);
typedef string (__stdcall * pICFUNC04)(string);
pICFUNC01 EnableLastCharTashkeel_function;
EnableLastCharTashkeel_function = pICFUNC01(function01);
pICFUNC02 EnableEmphaticLAM_RAA_function;
EnableEmphaticLAM_RAA_function = pICFUNC02(function02);
pICFUNC03 SetText_function;
SetText_function = pICFUNC03(function03);
pICFUNC04 GetResult_function;
GetResult_function = pICFUNC04(function04);
EnableLastCharTashkeel_function(true);
EnableEmphaticLAM_RAA_function(true);
FreeLibrary(LoadMe);
}
在這段代碼我調用DLL它加載成功,但
當我嘗試使用它編譯沒有任何錯誤,但在該行
EnableLastCharTashkeel_function任何功能(真); (第一次調用一個函數)
它froozes並給我下面的
未處理的異常在00000000在test_trans_new.exe:0000005:訪問衝突讀取位置00000000。
我猜,這becuse函數指針指向NULL,但我不知道如何解決它
我使用Visual C++ 2010
在此先感謝
感謝你們的一切答覆是真正有用的,但問題仍然ocurrs,但我大致知道,如果我糾正這個問題的原因是,我試圖訪問的功能是COM類型,所以任何想法使用這種類型
在此先感謝
那麼,你的DLL實際上是出口這些功能?在Visual Studio中,你可以在函數前用'__declspec(dllexport)'來實現,例如'__declspec(dllexport)void myFunc(){...}'。或者你可以使用'.def'文件來導出函數。 – Xeo 2011-05-10 00:16:02
我用一個小程序,看看到底是什麼在這個DLL函數的名稱,因爲它不是我的,我得到了函數名稱:ITransCript :: EnableEmphaticFATHA 地址: 相對地址: 序:5(0x5的) 文件名:Trans_ATL .dll 完整路徑:G:\ Trans_ATL。DLL 類型:COM方法,所以類型,你看到COM可以解釋更多如何導出它,如果我上面張貼的代碼是不夠的,因爲這是我第一次處理DLL謝謝 – ADAM 2011-05-10 17:29:26