close

最近在趕國科會程式...由於之前用C語言寫,但是後來基於要自行開發介面與相對應之程式,所以改以C++的方式寫,也因為這樣,遇到不少問題,在此,僅記錄如標題之相關內容,供需要的人查詢或是留言討論。

「C++ call DLL file」在Google後有不少資料,方法很多,但我只列出對在這個Project有用到的方法;解法來自The CodeProject 這個網站裡的「How to load a dynamic link library (DLL) into a Microsoft Visual C++ 6.0 project」這篇文章,以下列出該方法。

typedef void (*EntryPointfuncPtr)(int argc, const char * argv)

HINSTANCE LoadME;

LoadMe = LoadLibrary("..\\enter a Path To Your Dll here\\LoadMe.dll");

if ( LoadME != 0 )
    printf("LoadMe library loaded!\n");
else
    printf("LoadMe library failed to load!\n");

EntryPointfuncPtr LibMainEntryPoint;

LibMainEntryPoint = (EntryPointfuncPtr)GetProcAddress(LoadMe,"entryPoint");

看一看,其實不難,照本宣科改一些變數名稱就可以得到自己要的程式....

typedef void (*LoadDLLFunc1)(); 
typedef void (*LoadDLLFunc2)(); 
static HINSTANCE hInst;
static HINSTANCE hInst2;

void LoadDllFile(void) {
    hInst = LoadLibrary(L"xxx.dll");
    hInst2 = LoadLibrary(L"xxx.dll");
    LoadFun();
}//end LoadDllFile(void)

void FreeDllFile(void) {
    FreeLibrary(hInst);
    FreeLibrary(hInst2);
}//end FreeDllFile(void)

void LoadFun(void) {
    DllLock = 1;
    while(1) {

        LoadDLLFunc1 func1;
        func1 = (LoadDLLFunc1)GetProcAddress( hInst, "MyFunc1" );
        func1();

        if( _access( "SomeFileName",0 ) != -1 ) {
            LoadDLLFunc2 func2;
            func2 = (LoadDLLFunc2)GetProcAddress( hInst2, "MyFunc2" );
            func2();
            break;
        }//end if

    }//end while

    DllLock = 0;
    FreeDllFile();
}//end LoadFun(void)

這是部分程式,使用了LoadDLL的方法以及使用完FreeDLL的方法,記得!!DLL用完記得Free掉,不然真的會Debug不完XD

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 YuRu 的頭像
    YuRu

    YuRu's Life

    YuRu 發表在 痞客邦 留言(0) 人氣()