2011-02-08 1 views
1

クラスを持たないC++動的ライブラリを作成しようとしています。 <string.h>を組み込み、strlenを直接呼び出す方法と似たように動作したいと思います。クラス名なしでC++ライブラリを作成する

私はコンパイルするクラスを作成できますが、私のライブラリと正しくリンクしません。

ここで私は今働いているテストライブラリです:

ヘッダー

#ifndef _DLL_H_ 
#define _DLL_H_ 

BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved); 
extern "C" __declspec(dllexport) int testMethod(int a); 

#endif 

CPP

#include "dll.h" 

int testMethod(int num) 
{ 
    std::cout << "test message" << std::endl; 
    return 1; 
} 

BOOL APIENTRY DllMain (HINSTANCE hInst,  // Library instance handle. , 
        DWORD reason,  // Reason this function is being called. , 
        LPVOID reserved)  // Not used. ) 
    { 
    switch (reason) 
    { 
     case DLL_PROCESS_ATTACH: 
     break; 

     case DLL_PROCESS_DETACH: 
     break; 

     case DLL_THREAD_ATTACH: 
     break; 

     case DLL_THREAD_DETACH: 
     break; 
    } 

// Returns TRUE on success, FALSE on failure 
return TRUE; 
} 

最後に、ここで私は、DLLをテストするために使用しているクラスは、どのですlib mingwの出力にリンクするように言われています。

#include <iostream> 
#include "../Dll/dll.h" 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
    testMethod(5); 
} 

私は

+3

「マイライブラリに正しくリンクされません」:どのようなエラーメッセージや問題が発生しますか? – aschepler

答えて

4
extern "C" __declspec(dllexport) int testMethod(int a); 

かなり錆びてるので、これは、DLLにリンクされているアプリケーションでDLLIMPORTする必要がおよそ年にC++を使用していません。ほとんどの人は、エクスポートまたはインポートであるかどうかを制御する#defineでDLLをコンパイルします。

#ifdef INSIDE_MYDLL 
#define MYDLLAPI __declspec(dllexport) 
#else 
#define MYDLLAPI __declspec(dllimport) 
#endif 

extern "C" MYDLLAPI int testMethod(int a); 
関連する問題