C++/CLI混合模式DLL创建

Ada*_*ile 14 .net mixed-mode interop c++-cli

我有一个本机C++ DLL,我希望有一个C++/CLI包装层.根据我的理解,如果你简单地将C++/CLI类添加到项目中,VS将编译为混合模式,但我显然是错误的,因为VS似乎甚至没有触及托管代码.

所以,对于一个已经存在的本地代码库什么究竟,一步一步的,你需要做的,创建一个混合模式DLL,这样我可以从任何.NET语言链接到该代码?

*我需要这样做,因为我的本机代码使用我无法P/Invoke进入的C++类.

Han*_*ant 18

好吧,不,它告诉C++/CLI编译器你的遗留DLL是用非托管代码编写的,它不会成为混合模式.哪个应该引人注意,你应该从非托管DLL导出中获得链接器错误.您需要使用#pragma managed:

#pragma managed(push, off)
#include "oldskool.h"
#pragma comment(lib, "oldskool.lib")
#pragma managed(pop)

using namespace System;

public ref class Wrapper {
private:
    COldSkool* pUnmanaged;
public:
    Wrapper() { pUnmanaged = new COldSkool; }
    ~Wrapper() { delete pUnmanaged; pUnmanaged = 0; }
    !Wrapper() { delete pUnmanaged; }
    void sampleMethod() { 
        if (!pUnmanaged) throw gcnew ObjectDisposedException("Wrapper");
        pUnmanaged->sampleMethod(); 
    }
};
Run Code Online (Sandbox Code Playgroud)


Ben*_*igt 6

防止/ clr影响现有代码的一个好方法是将所有现有代码编译到本机静态库中,然后在C++/CLI dll的链接步骤中包含该静态库.


Dan*_*röm 1

开始一个新的 C++/CLI 项目,然后将本机类移至其中。