2013-06-11 3 views
0

C++로 작성된 DLL을 사용하려고합니다. DLL 예제에서 다음 코드의 헤더 (.h)가 있습니다.C++ 클래스에서 DllImport를 사용하려면 어떻게해야합니까?

#ifndef CODEGEN_H 
#define CODEGEN_H 

// Entry point for generating codes from PCM data. 
#define VERSION 3.15 

#include <memory> 
#include <string> 

#ifdef _MSC_VER 
    #ifdef CODEGEN_EXPORTS 
     #define CODEGEN_API __declspec(dllexport) 
     #pragma message("Exporting codegen.dll") 
    #else 
     #define CODEGEN_API __declspec(dllimport) 
     #pragma message("Importing codegen.dll") 
    #endif 
#else 
    #define CODEGEN_API 
#endif 

class Fingerprint; 
class CODEGEN_API Codegen 
{ 
public: 
    Codegen(const float* pcm, uint numSamples, int start_offset); 

    string getCodeString(){return _CodeString;} 
    int getNumCodes(){return _NumCodes;} 
    float getVersion() { return VERSION; } 
private: 
    string _CodeString; 
    int _NumCodes; 
}; 

#endif 

어떻게 DLL에 액세스하여 해당 메서드를 사용할 수 있습니까? [DllImports("codegen.dll")]을 사용해야하지만 같은 예제의 생성자를 사용할 때 어떻게됩니까?

+0

P/Invoke 메커니즘은 C++ 클래스 용이 아니며 C API에서만 작동합니다. 래퍼 함수를 ​​작성하거나 C# 대신 C++/CLI를 사용해야합니다. –

+0

가능한 [C#에서 비 관리 C++ 코드를 pinvoke를 사용하여 호출] (http://stackoverflow.com/questions/6332126/call-unmanaged-c-code-from-c-sharp-using-pinvoke), [DLLImport를 사용하여 가져 오기 개체] (http://stackoverflow.com/q/2071993), [C# 프로그램에서 Visual C++로 작성된 DLL을 사용하는 방법?] (http://stackoverflow.com/q/13222076) –

답변

2

P/Invoke는 C++ 클래스가 아니라 C API에서 작동하도록되어 있습니다.

C API에서 C++ 클래스를 마무리하고 내보내기해야합니다. 그런 다음 C API의 개별 메소드를 P/Invoke ([DllImport(...)] 사용) 할 수 있습니다.

+0

하지만 어떻게 이 수출은 어떻게합니까? dll이 C++에서도 작동합니까? –

+0

@RenanRigoCalesso 가지고있는 DLL은 P/Invoke와 함께 사용할 수 없습니다. C++/CLI를 사용하여 포장하거나 (또는 ​​별도의 DLL) C API를 사용하여 C#으로 노출해야합니다. –

+0

@RenanRigoCalesso 참고 : http://www.codeproject.com/Articles/18032/How-to-Marshal-a-C-Class –

관련 문제