在CLR库中使用C链接的托管DLL

时间:2016-02-18 21:35:48

标签: c visual-c++ dll c++-cli

我有一个最初用C编写的项目。它非常大,所以如果我可以避免它,我不想手工重写它。最终目标是将其嵌入到C#应用程序中。我以前制作和使用过CLR库,但是我遇到了以下问题。

// CommandParse.h, used in a Win32 DLL
extern "C" {
    typedef struct _PARAMS {
        PCHAR OutputDir;
        //... other members
    } PARAMS, *PPARAMS;

    // defines in CommandParse.c
    __declspec(dllexport) VOID CmdParseParameters(PPARAMS, int, char ** const);  
}

我正在使用VS2013进行这些项目。上面的例子是每个其他组件中使用的刻板设计模式。

// CommandParseWrapper.h, CLR library
namespace WrappedCode {
    public ref class CommandParams {
        PPARAMS params;
    public:
        CommandParams() {
            params = new PARAMS;
        }

        void parse(int argc, char ** const argv) {
            CmdParseParameters(params, argc, argv);
        }
    }
}

我在CLR项目中所做的是添加Win32DLL项目作为参考,并将源代码添加到VS2013中的“其他包含”设置。但是我提出了以下错误。

  

错误LNK2019:未解析的外部符号“extern”C“void __cdecl CmdParseParameters(struct _PARAMS *,int,char ** const)”...

     

错误LNK2028:未解析的令牌(0A00002E)“extern”C“void __cdecl CmdParseParameters(struct _PARAMS *,int,char ** const)”...

导致编译失败。 有什么建议吗?

注意:我不反对编辑原始代码。

0 个答案:

没有答案