2010-10-22 87 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

相關問題