gpt4 book ai didi

c# - 在 C# 中创建非托管 C++ 对象

转载 作者:IT老高 更新时间:2023-10-28 23:11:22 27 4
gpt4 key购买 nike

我有一个包含类“MyClass”的非托管 dll。现在有没有办法在 C# 代码中创建此类的实例?调用它的构造函数?我试过了,但 Visual Studio 报告错误,并显示此内存区域已损坏或其他什么的消息。

提前致谢

最佳答案

C# 无法创建从 native Dll 导出的类实例。你有两个选择:

  1. 创建 C++/CLI 包装器。这是 .NET 类库,可以作为引用添加到任何其他 .NET 项目。在内部,C++/CLI 类与非托管类一起使用,通过标准 C++ 规则链接到 native Dll。对于 .NET 客户端,这个 C++/CLI 类看起来像 .NET 类。

  2. 为 C++ 类编写 C 包装器,它可以由带有 PInvoke 的 .NET 客户端使用。例如,过度简化的 C++ 类:

    class MyClass()    {    public:        MyClass(int n){data=n;}        ~MyClass(){}        int GetData(){return data;}    private:        int data;    };

此类的 C API 包装器:

    void* CreateInstance()    {        MyClass* p = new MyClass();        return p;    }    void ReleaseInstance(void* pInstance)    {        MyClass* p = (MyClass*)pInstance;        delete p;    }    int GetData(void* pInstance)    {        MyClass* p = (MyClass*)pInstance;        return p->GetData();    }    // Write wrapper function for every MyClass public method.    // First parameter of every wrapper function should be class instance.

CreateInstance、ReleaseInstance 和 GetData 可以在 C# 客户端使用 PInvoke 声明,并直接调用。 void* 参数应在 PInvoke 声明中声明为 IntPtr。

关于c# - 在 C# 中创建非托管 C++ 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2636958/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com