2010-10-22 84 views
1

我想知道我怎么叫究竟从项目A的函数/ CLR函数:: ClassA的:: FuncA的()是从ProjectB :: ClassB :: FuncB()/ CLR不具有clr支持并且是纯Win32项目的Win32.lib。 这两个项目都在相同的解决方案。调用从一个Win32的.lib项目,从一个项目,是一个纯粹的Win32项目,没有CLR

首先,这是我曾尝试: 1中创建的项目A与.LIB 2.增加的.lib路径项目B的属性(链接:输入:Add.Dependencies) 3.我增加了.H用于通过项目A在项目B 创建的.lib 4.创建在项目B :: ClassB的用于项目A :: ClassA的对象,并试图调用FuncA的行()。

我得到以下错误:

Error 1 error LNK2019: unresolved external symbol "public: static void __cdecl ClassA::FuncA(void)" ([email protected]@@SAXXZ) referenced in function "public: static void __cdecl ClassB::FuncB(void)" ([email protected]@@SAXXZ) Helper.obj

我使用第三方的.lib S IN项目B成功。我遵循相同的过程,但失败了; ProjectA()唯一的区别是支持CLR。

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

谢谢!

+0

不要你必须有CLR支持调入管理组件。 – rerun 2010-10-22 05:33:25

+0

@rerun:我在ProjectA(.lib)中支持CLR,我在ProjectB中使用它。所以,ProjectA有CLR支持,ProjectB没有。 ProjectA仍然是一个Win32项目,只是我已经添加了CLR支持。 – Daniel 2010-10-22 05:45:52

回答

1

本地代码可以调用托管代码,但需要在一个与/ CLR编译源代码文件做。 ProjectB中需要一个适配器类,它是本机的(不带“ref”)。如果这些是实例方法,那么在适配器中需要gcroot<>来存储对托管类的引用。

+0

感谢您的信息。我可以从ProjectB调用在ProjectA中实现的托管函数 - 都是Win32项目,如上所述。不过,现在我已经打了另一个不寻常的(相当平常的)情况(对我来说)。我有ProjectA :: ClassA中的静态和非静态函数。我有一个ProjectB :: ClassB对象,我想用它来调用这些ClassA函数。我可以使用ClassB对象调用ProjectA :: ClassA中的非静态/实例方法。 – Daniel 2010-10-22 06:45:22

+0

但我无法调用其中使用ClassA的::或ClassB的::任一类名的静态函数(类ClassB的:公共ClassA的是怎么了子类)。 我是新来的“Win32 + CLR”和“Win32”之间的互操作。任何指针?我公然错过了什么吗? – Daniel 2010-10-22 06:45:47

+0

也许,静态函数更容易。我不可能猜到你错过了什么,甚至没有包含错误信息。更新你的问题。 – 2010-10-22 07:07:51

相关问题