Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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+项目中使用c#dll+; 我想在C++项目(VisualStudio 2003)中使用C语言(VisualStudio 2008)中的DLL。怎么做?请Heelelp< P>不能直接使用非托管C++代码中的.NET程序集。一种可能的解决方案是使用实用程序将程序集公开为COM对象,然后从C++中使用它。请注意,需要作为COM对象公开的.NET类型可能需要用属性来修饰,并且仍然需要在运行C++代码的目标计算机上安装.NETFramework。 < P>有很多方法可以做到这一点。p>_C#_C++ - Fatal编程技术网

在c+项目中使用c#dll+; 我想在C++项目(VisualStudio 2003)中使用C语言(VisualStudio 2008)中的DLL。怎么做?请Heelelp< P>不能直接使用非托管C++代码中的.NET程序集。一种可能的解决方案是使用实用程序将程序集公开为COM对象,然后从C++中使用它。请注意,需要作为COM对象公开的.NET类型可能需要用属性来修饰,并且仍然需要在运行C++代码的目标计算机上安装.NETFramework。 < P>有很多方法可以做到这一点。p>

在c+项目中使用c#dll+; 我想在C++项目(VisualStudio 2003)中使用C语言(VisualStudio 2008)中的DLL。怎么做?请Heelelp< P>不能直接使用非托管C++代码中的.NET程序集。一种可能的解决方案是使用实用程序将程序集公开为COM对象,然后从C++中使用它。请注意,需要作为COM对象公开的.NET类型可能需要用属性来修饰,并且仍然需要在运行C++代码的目标计算机上安装.NETFramework。 < P>有很多方法可以做到这一点。p>,c#,c++,C#,C++,C#DLL是COM DLL吗?如果是这样,你可以使用常规的COM API /规范来访问C++程序。有许多教程介绍如何使C#DLL COM可见。这并不难,基本上有一些编译开关和C#属性 另外,您能使用编译器开关编译C++项目吗?如果是这样,您可以使用直接导入C#DLL。生成库文件[.Tlb]文件,然后只有我们可以使用DLL。您必须对原始c#DLL创建.TLB(类型库文件),并在VC++代码中使用该.TLB库。为此,您必须在pc上注册.TLB文件,并且有必要在vc++应用程序中导入该.TLB文件。

C#DLL是COM DLL吗?如果是这样,你可以使用常规的COM API /规范来访问C++程序。有许多教程介绍如何使C#DLL COM可见。这并不难,基本上有一些编译开关和C#属性


<>另外,您能使用编译器开关编译C++项目吗?如果是这样,您可以使用直接导入C#DLL。

生成库文件[.Tlb]文件,然后只有我们可以使用DLL。您必须对原始c#DLL创建.TLB(类型库文件),并在VC++代码中使用该.TLB库。为此,您必须在pc上注册.TLB文件,并且有必要在vc++应用程序中导入该.TLB文件。
编写C#DLL时,请记住使用将在类中实现的接口。

正如Darin所说,一种方法是通过COM。其他两种方式(我知道)是:

    可以在C++中创建混合模式DLL。DLL可以包含并调用托管代码,但它也可以输出非托管函数,比如普通C++ DLL。它可以包含任何其他的C++ DLL
  • 这要困难得多,但您也可以托管CLR。谷歌为“CLR托管”查找有关API或示例的详细信息

不仅仅是COM互操作,还列出了鲜为人知的方法:

<强> 2.2:如何调用来自Visual C++的.NET程序集?< /强>

基本上有四种方法来解决这个问题 从本机VC调用.NET程序集++ 代码。微软有这样的例子 演示这些方法

  • 本机VC++模块调用主机CLR、加载和 调用.NET程序集。(一应俱全 代码框架示例代码: CppHostCLR)

  • 如果.NET程序集可以作为COM组件公开,则为native VC++模块可以调用.NET 程序集通过.NET–COM互操作。 (多功能代码框架示例) 代码:CppCOMClient)

  • 反向PInvoke:传递委托的托管代码调用 本机代码可以回调。 (多功能代码框架示例) 代码:CSPSinvokedll)

  • 如果允许包含本机VC++代码的模块调用,则本机VC++代码可以调用 .NET程序集直接通过“It “只工作”或“IJW”机制。(一体式代码框架示例代码:cppcriwraplib)

  • 将“Resolve#using References”(项目->C/C++->General)编译器选项设置到包含所需程序集的目录后,在代码中放入一行如下内容

    #using <NiftyAssembly.dll>
    
    #使用
    
    可能重复的@0xA3:我很好奇,VC++2008如何让事情变得更简单?在VC 2003中编译的代码可以包含COM组件,它可以包括任何类型的本地包装DLL,即使它是用VC2008编写的,对.@ NIKIE:据我所知,VC++/CLR选项将要求C++和C.Y.DLL都使用相同的.NET运行时版本。VS2003仍然以旧的.NET 1.1为目标。@0xA3:True,但他可以在VC 2008中编写C++/CLR包装DLL,并将其包含在现有的VC2003项目中,而无需升级现有项目。