我有一个我在C#中编写的DLL,我想用C#应用程序和使用非托管VC++编写的应用程序来使用它。这可能吗?是否有可能在非托管VC++应用程序中使用使用C#创建的DLL?
回答
为了补充这里的其他答案,这里是描述你的场景的MS支持文章。
您可以使C#程序集对COM可见,并以此方式使用它。
在C#项目属性的“Assembly Information”按钮下,选择“Make COM Visible”。
有很多方法可以从Native C++访问COM对象,最简单/最好的方法取决于你在做什么和如何做。
+1 - 这几乎是它。 COM interop几乎是这种情况下唯一明智的方式。 – TomTom 2010-05-20 12:42:06
-1,没有评论。 。 。怎么会这样?如果我的答案有问题,请你让我知道吗?我们都在这里学习,谢谢。 – 2010-05-20 12:45:57
感谢您的回复,我将使用这种方法。 :) – 2010-05-20 14:09:15
有不仅仅是COM互操作越多,MSDN FAQ还列出了鲜为人知的方法:
2.2如何调用来自本机的Visual C .NET程序集++?
基本上有四种方法可以从本地VC++ 代码调用.NET程序集中的 。微软All-In-One Code Framework有 演示方法的工作示例。
本地VC++模块调用CLR Hosting APIs到主机CLR,负载和 调用.NET组件。 (多功能一个 代码框架中的示例代码: CppHostCLR)
如果.NET组件可以公开为一个COM组件,天然 VC++模块可以通过.NET调用到.NET 总成 - COM互操作。 (多功能一站式示例代码库示例 代码:CppCOMClient)
反向的PInvoke:托管代码调用本地传递一个委托 本地代码可以回调。 (全多功能一体机代码框架示例 代码:CSPInvokeDll)
如果包含天然VC++代码模块被允许enable CLR,天然VC++代码可以调用 .NET组件可直接通过“它 只是作品“或”IJW“机制。 (多功能一站式示例代码库示例代码:CppCLIWrapLib)
嗯,看来我不得不再次提到我unmanaged exports。 ;-)
刚刚在2天前回答了similar question。这完全工作在C#中,它甚至为你的C#程序集创建的.lib &文件.exp由C++消耗:
internal class Sample
{
[DllExport("_export_test", CallingConvention.Cdecl)]
static int Test(int a)
{
return a + 1;
}
}
哇!真?我假设C#需要被标记为不安全?我没有想到你可以做到这一点。 – 2010-05-21 12:18:14
该程序集将包含不安全的位,但在用作.Net程序集时不会被认为是不安全的。您仍然可以将它用作普通的x86或x64(不是AnyCPU)程序集,并包含所有类和东西。但是,如果将它作为真正的DLL加载,它将表现得像一个一样。这是不安全位开始的地方。 – 2010-05-21 13:56:46
- 1. 在非托管C++ dll中使用托管c#dll
- 2. 在c#项目中使用托管dll(它使用非托管dll)
- 3. 是否有可能在非web应用程序中使用togglz
- 4. 如何在混合应用程序中执行异常处理? (托管应用程序使用非托管DLL)
- 5. 是否有可能将QT应用程序托管到WPF应用程序中?
- 6. 是否有可能在live.com上托管应用程序?
- 7. 从C#应用程序中的非托管DLL导入函数
- 8. VC++和C#如何编写托管DLL或非托管DLL?
- 9. 非托管vC++静态库和C#GUI应用程序
- 10. C#托管的dll调用或非托管的dll调用?
- 11. 从没有COM的非托管C++应用程序调用C#dll
- 12. 使用.NET应用程序未知/非托管的DLL的 - 获取未知DLL
- 13. 是有可能的C++/CLI DLL使用静态VC++的lib
- 14. 从非托管C++创建COM DLL LIB
- 15. 如何在非托管C++应用程序中托管许可的.Net控件?
- 16. 我可以使用VC++ 2008创建DLL并在VC++ 6中使用它吗?
- 17. 如何在可能没有托管配置提供程序的应用程序中使用托管配置?
- 18. 在WPF应用程序中加载非托管DLL
- 19. 是否有可能在C#中使用BDE创建的表格?
- 20. 移植(非托管)C++到C#与在C#应用程序中使用C++作为DLL
- 21. 几个应用程序域调用相同的非托管dll
- 22. 非托管dll的LoadLibrary返回ASP.NET应用程序中的IntPtr.Zero
- 23. 是否有可能使用C#开发Android应用程序?
- 24. 使用托管C++ DLL在c#
- 25. 如何在独立(非托管)应用程序中使用jndi?
- 26. 在混合C++ .NET应用程序中强调托管还是非托管?
- 27. 是否可以使用Java创建dll?
- 28. NTier应用程序 - 创建非DLL类
- 29. 是否有可能在phonegap ios应用程序中使用iframe
- 30. 如何从非托管应用程序中延迟加载托管的DLL?
+1:非常棒的google-fu!这个链接正是马修所需要的。 – 2010-05-20 12:44:36
@Binary Worrier - 我担心我会踩着你的脚趾,上面的链接,因为它看起来像你要编辑你的答案。 – 2010-05-20 12:49:25
荣誉伙计,最快的手指赢了:) – 2010-05-20 13:07:50