Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何导出C#dll方法/函数以在C+中使用它+;_C#_C++_Unmanaged_Dllexport - Fatal编程技术网

如何导出C#dll方法/函数以在C+中使用它+;

如何导出C#dll方法/函数以在C+中使用它+;,c#,c++,unmanaged,dllexport,C#,C++,Unmanaged,Dllexport,我已经用C#完成了我的部分编码,下面给出了一个小方法 public static unitdefn GetUnit(XmlDocument doc) { XmlNodeList nodeList1 = (XmlNodeList)doc.DocumentElement.SelectNodes("//UnitDefinitions/Unit"); int countdefn = nodeList1.Count; unitdefn[] ar

我已经用C#完成了我的部分编码,下面给出了一个小方法

 public  static unitdefn GetUnit(XmlDocument doc)
    {

        XmlNodeList nodeList1 = (XmlNodeList)doc.DocumentElement.SelectNodes("//UnitDefinitions/Unit");
        int countdefn = nodeList1.Count;
        unitdefn[] arrunt = new unitdefn[countdefn];
        if (countdefn != 0)
        {

            int i = 0;
            foreach (XmlNode node in nodeList1)
            {
                XmlAttribute att = node.Attributes["name"];
                if (att != null)
                {
                    string idu = node.Attributes["name"].Value;
                    //System.Console.WriteLine(id1);
                    arrunt[i].name = idu;
                }
                i++;
            }

        }
        return arrunt[0];
    }

我希望这个方法在我的C++项目中使用,我已经做了如下的< /P>

int  xmlRead()
{

int x=1,s=1;
char xmldllpath[1000]="//dllpath";
HMODULE h = LoadLibrary(xmldllpath);

if (!h) {
    printf("error: Could not load %s\n", xmldllpath);
    return 0; // failure
}

getAdr(&s, h, "GetUnit");
}
dll已成功加载,但未获取该方法
任何具体的方法都不要。不支持从C#导出方法。手动编辑发出的程序集几乎是不可能的,但实际上-不要这样做

您可以使用以下几种适当的解决方案:

  • 使用C++/CLI项目向非托管代码公开托管方法
  • 使用COM(.NET基本上是COM 2,所以这非常容易;在C++方面也很容易消耗)
  • 在初始化时将委托传递给非托管代码,并在需要时调用该委托
  • 使用其他进程间通信方法(例如命名管道、TCP…)

    • 不要这样做。不支持从C#导出方法。手动编辑发出的程序集几乎是不可能的,但实际上-不要这样做

      您可以使用以下几种适当的解决方案:

      • 使用C++/CLI项目向非托管代码公开托管方法
      • 使用COM(.NET基本上是COM 2,所以这非常容易;在C++方面也很容易消耗)
      • 在初始化时将委托传递给非托管代码,并在需要时调用该委托
      • 使用其他进程间通信方法(例如命名管道、TCP…)

        • 不要这样做。不支持从C#导出方法。手动编辑发出的程序集几乎是不可能的,但实际上-不要这样做

          您可以使用以下几种适当的解决方案:

          • 使用C++/CLI项目向非托管代码公开托管方法
          • 使用COM(.NET基本上是COM 2,所以这非常容易;在C++方面也很容易消耗)
          • 在初始化时将委托传递给非托管代码,并在需要时调用该委托
          • 使用其他进程间通信方法(例如命名管道、TCP…)

            • 不要这样做。不支持从C#导出方法。手动编辑发出的程序集几乎是不可能的,但实际上-不要这样做

              您可以使用以下几种适当的解决方案:

              • 使用C++/CLI项目向非托管代码公开托管方法
              • 使用COM(.NET基本上是COM 2,所以这非常容易;在C++方面也很容易消耗)
              • 在初始化时将委托传递给非托管代码,并在需要时调用该委托
              • 使用其他进程间通信方法(例如命名管道、TCP…)

              有一个很大的问题,“出口”C++方法在C++ .NET代码中运行,所有的内容都在.NET虚拟机中运行。后台的东西总是在JIT、最终化/垃圾收集等方面进行。答案是复杂得多。“出口”C语言的方法存在一个很大的问题,即C++(C+C)代码在.NET虚拟机中运行。背景中的一些东西总是在JIT、定型/垃圾收集等方面进行。在支持C++代码直接调用的情况下,如何提供这种环境?答案是复杂得多。“出口”C语言的方法存在一个很大的问题,即C++(C+C)代码在.NET虚拟机中运行。背景中的一些东西总是在JIT、定型/垃圾收集等方面进行。在支持C++代码直接调用的情况下,如何提供这种环境?答案是复杂得多。“出口”C语言的方法存在一个很大的问题,即C++(C+C)代码在.NET虚拟机中运行。背景中的一些东西总是在JIT、定型/垃圾收集等方面进行。在支持C++代码直接调用的情况下,如何提供这种环境?答案要复杂得多。