将托管的C#DLL包含到非托管的C ++ DLL中-全部集中在一个文件中

匿名的

简介:如何将非托管dll和托管程序集合并到一个文件中?

与上述问题相比,我需要组合DLL,以便最终的混合DLL可以将其功能导出到其他非托管应用程序。

为此,我想将它们都编译为.netmodule,然后将它们与一个链接器组合成一个文件,所以我有:

1)Libs-在C#中有一些库的项目-它没有任何依赖关系,而且我可以像.netmodule一样轻松地对其进行编译

2)链接-引用了C#库的C ++非托管项目,不幸的是,我无法使用cl.exe编译器进行构建,因为它始终会给出一个错误,指出即使我试图将编译器指向C ++库,也无法找到命名空间。它可以找到对我的C#程序集的引用的所有文件夹,该C ++项目的使用就像C#的CLR方法上的简单C ++包装器一样

这是我的批处理脚本,第二行抛出错误:

"c:/Windows/Microsoft.NET/Framework/v4.0.30319/csc.exe" /target:module /out:./Build/libs.netmodule Libs\Properties\*.cs Libs\*.cs
"c:/Program Files/Microsoft Visual Studio 12.0/VC/bin/cl.exe" /clr /AI"D:\T\CPlus\Library\Release" /AI"D:\T\CPlus\Library\Libs" /AI"D:\T\CPlus\Library\Libs\Properties" /LN Links\*.cpp

问题:是否有人现在让C ++知道它在哪里可以找到C#程序集来解析引用,或者我是否需要以某种方式在批处理命令中明确提及我的头文件?

源代码: C#只是带有方法Foo的空类,而C ++看起来像这样。

// Links.h

#pragma once

#define DllExport extern "C" __declspec(dllexport)

using namespace System;
using namespace Libs; // cl.exe cannot resolve this reference

// Links.cpp

#include "Links.h"

DllExport int __stdcall Execute()
{
    Libs::CLibrary::Foo();
}
匿名的

这是最终的工作版本。

"c:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" /target:module /out:Libs.netmodule /recurse:..\Libs\*.cs
"c:\Program Files\Microsoft Visual Studio 12.0\VC\bin\cl.exe" /clr /LN /Fo /Y- /Z7 /FU Libs.netmodule ..\Links\Links.cpp /link /LIBPATH:"c:\Program Files\Microsoft Visual Studio 12.0\VC\lib" /LIBPATH:"c:\Program Files\Microsoft SDKs\Windows\v7.1A\Lib"
"c:\Program Files\Microsoft Visual Studio 12.0\VC\bin\link.exe" /DLL /LTCG /CLRIMAGETYPE:IJW /OUT:Library.dll Libs.netmodule Links.obj /LIBPATH:"c:\Program Files\Microsoft Visual Studio 12.0\VC\lib" /LIBPATH:"c:\Program Files\Microsoft SDKs\Windows\v7.1A\Lib"

有用的链接:

现在,我可以在非托管应用程序中使用从.NET导出的功能。此外,来自这两个项目的所有信息-链接(C ++)和库(C#)-都被分组在一个文件中-Library.dll。这样,我可以将多个项目合并到一个DLL中,无论它们是托管项目还是本机项目都无关紧要。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C#DLL异常未在非托管C ++中捕获

从非托管C#DLL返回列表/数组

我可以在非托管Delphi EXE中使用托管C#DLL吗?

C#到非托管C ++ DLL访问冲突/“框架不在模块中”

将C#DLL合并到.EXE中

始终从 C# 中的同一线程调用非托管 dll

围绕非托管DLL的C#包装器库要求在构建过程中非托管DLL位于同一目录中

如何在C#中定义非托管dll依赖项

C# Visual Studio 2008,将 DLL 包含到 exe 中?

将非托管 DLL 从 Nuget 包包含到 Web 部署包

使用csproj在NuGet程序包中包含非托管DLL

在Windows CE中从经典ASP调用非托管DLL

C#dll中的C#强制转换异常

C#将指向结构(包含不可复制类型)的指针传递给非托管C ++ DLL

如何将TeamCity构建版本放入非托管DLL和OCX控件中?

C#从文件加载一个dll,然后更新那个dll,然后从文件中重新加载dll

c#asp.net mvc5,将js嵌入到c#dll中

如何在Python中从C#dll导入子模块

C#DLL库中的String.ToLower

在python脚本中从C#dll创建通用列表

列出C#DLL中的类和函数头

为什么我的C#DLL中的方法丢失了?

在V#的C#dll中返回string []

如何在电子App中调用C#dll方法?

无法从SYSPRO中的VBscript调用C#dll

使用golang生成标头/声明文件-全部集中在一个文件中吗?

在C#中使用非托管DLL

如何使用从C ++到C#dll的非托管导出发送函数指针以用作回调

将依赖的托管DLL添加到非托管C ++项目

TOP 榜单

热门标签

归档