gpt4 book ai didi

c# - 托管代码和非托管代码之间的调用

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:11 25 4
gpt4 key购买 nike

<分区>

我的应用程序分为两部分 C#(托管代码)和 C++(非托管代码)。这两个部分经常互相调用,并且通常在它们之间传递字符串。我想知道做到这一点的最佳且无错误的方法。

我把问题分为两部分

  1. 从托管代码调用非托管代码时,我使用 String Builder 从托管代码传递到非托管代码:

    [DllImport("SomeXYZ.dll")]
    // enter code here

    private void XYZ(string text)
    {
    StringBuilder builder = new StringBuilder();
    builder.Append(“Var1”);
    FromManagedtoUnmanaged(builder);
    }

    C++代码:

    extern "C"
    {
    int _declspec(dllexport) FromManagedtoUnmanaged(char* var1);
    }
  2. 从非托管到托管,我使用函数指针将 c# 函数的函数引用提供给 c++ 函数:

    C#代码

    [DllImport("SomeXYZ.dll")]
    public static extern void SetCallback(Callback fn);
    public delegate void Callback(string text);
    public Callback mInstance;

    private void ABC(string text)
    {
    mInstance = new Callback(SomeFunctionName);
    SetCallback(mInstance);
    }

    头文件中的 C++ 代码:

    extern "C" 
    {
    void __declspec(dllexport) __stdcall SetCallback(Callback handler);
    void __declspec(dllexport) __stdcall SendReceiveMessage(char* arr1);
    }

    在 .cpp 文件中:

    void __stdcall SetCallback(Callback handler1) {
    Handler = handler1;
    }

    void __stdcall SendReceiveMessage(char* arr1) {
    Handler(arr1);
    }

    void SendMsg(int SomeVar)
    {
    char *str;
    str = new char[1024];
    sprintf(str, “<body>%d</body>”, SomeVar);
    SendReceiveMessage(str);
    }

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