如何将DllImport与C ++类一起使用?

时间:2013-06-11 19:13:01

标签: c# .net dllimport

我正在尝试使用用C ++编写的DLL。在DLL的示例中,有一个标题(.h),其中包含以下代码:

#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")]但是因为我在给出示例时使用了相同形式的构造函数?

1 个答案:

答案 0 :(得分:2)

P / Invoke旨在使用C API,而不是C ++类。

您需要在C API中包装C ++类并导出它。然后,您可以P / Invoke(使用[DllImport(...)])C API中的各个方法。