使用/ clr从一个纯Win32项目的项目调用Win32 .lib项目中的函数,没有clr

时间:2010-10-22 05:12:04

标签: .net c++ winapi interop clr

我想知道如何从ProjectA :: ClassA :: FuncA()调用一个函数,该函数是一个Win32 .lib,带有来自ProjectB :: ClassB :: FuncB()的/ clr,它没有clr支持并且是纯粹的Win32项目。 这两个项目都在同一个解决方案中。

首先,这是我尝试过的: 1.使用.lib创建ProjectA 2.添加.lib路径到ProjectB属性(在链接器:输入:添加。依赖项) 3.我在ProjectB中为ProjectA创建的.lib添加了.h 4.在ProjectB :: ClassB中为ProjectA :: ClassA创建了对象,并尝试调用FuncA()。

我收到以下错误:

  

错误1错误LNK2019:未解析的外部符号“public:static void __cdecl ClassA :: FuncA(void)”(?FuncA @ ClassA @@ SAXXZ)在函数“public:static void __cdecl ClassB :: FuncB(void)”中引用“(?FuncB @ ClassB @@ SAXXZ)Helper.obj

我在ProjectB中成功使用第三方.lib。我遵循相同的过程,但它失败了;唯一的区别是ProjectA()是CLR支持。

我错过了什么吗?请赐教; - )

谢谢!

1 个答案:

答案 0 :(得分:1)

本机代码可以调用托管代码,但需要在使用/ clr编译的源代码文件中完成。你需要一个在ProjectB中本机(没有“ref”)的小适配器类。如果这些是实例方法,则适配器中需要gcroot<>来存储对托管类的引用。