2011-08-30 39 views
2

我們開發了一個需要從非託管C++程序(以及Fortran程序)訪問的C#4.0模塊。 DLL被正確加載並且該方法可用於C++程序,但在調用指向C#代碼的方法時會引發異常。對於可視化:在C++代碼中更改.NET 4運行時激活策略

[Unmanaged C++/Fortran Projects] 
    -> controller.dll (unmanaged C++ within the C++ project)  
    -> managed_wrapper.dll (managed C++ within the C# project) 
     -> C# 4.0 Project 

當控制器試圖調用託管C++(使用.NET 4.0框架)的異常被拋出。

我的懷疑是下面的配置需要被應用,因爲我們遇到錯誤時以前creating a proof of concept

<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0"/> 
    </startup> 
</configuration> 

我正確地運用它的概念的上述證據,但是這是在一項獨立獨立的控制檯應用由於非託管C++程序非常龐大,並且每個模塊的設置都不是通用的,因此我無法使用上述配置創建MyApplication.exe.config文件並將其稱爲一天。

我的問題是這樣的:是否可以將該配置應用於特定的DLL?

回答

2

從我的理解,這是不可能的。

的問題是,配置設置,您需要申請()基本上是說「這整個應用程序,無論什麼裝配要求,使用CLR 4代替。

如果可以申請它以一個DLL,你會在這裏侵犯的目標 - 因爲目標是迫使所有組件使用CLR 4


編輯:

經過進一步研究,實際上有一種方法可以在一些有限的情況下做到這一點。 I posted about this on my blog,但基本上,您可以使用CLR Hosting API從庫中獲取一些設置。

+0

因此,不可能通過非託管C++調用.NET 4代碼? –

+0

@Chuck:如果您需要混合模式(C++/CLI).NET 4程序,據我所知,您必須**更改應用程序本身的app.Config。這令人難以置信的煩人,我真的希望我錯了。 (我們經歷了這個,我被迫將一個龐大的代碼庫移植到.NET 3.5中,正是出於這個原因 - 我無法在不打破另一個[第三方]插件的情況下將該策略添加到應用程序中,所以我被迫回到3.5端口) –

+0

哦,jeez。我所做的每一項研究都表明了同樣的事情,但我希望有一個神奇的解決方案。非常感謝你的幫助。 –

相關問題