我有一個託管的C++ DLL,它與一個非託管的C++ DLL動態鏈接。託管的C++從非託管dll中的抽象接口派生出幾個非託管類。託管C++中的非託管C++模板會拋出錯誤的圖像?
這工作正常。
----------
//使用宏__declspec(DLLEXPORT)
類EXPORT_API ICustomer
{
公共:
虛擬無效PlaceOrder()= 0;
//
};
----- <在託管C++> -----
`的#include 「unmanagedlib/ICustomer.h」
//在託管的DLL中定義的非託管派生類
類LocalCustomer.h LocalCustomer:public ICustomer
{
public:
void PlaceOrder();
//
};
LocalCustomer用於Managed dll。我可以將它傳遞給非託管dll中的函數,並且它可以正常工作。
這是問題所在。 當我嘗試實現一個暴露模板的接口時,我在啓動時得到一個STATUS_INVALID_IMAGE_FORMAT。
不運行。
--------
stuct訂單
{
雙價;
// ...
};
模板<typename T
>
類EXPORT_API ICollection的
{
// ....
};
類EXPORT_API器IFactory
{
公共:
虛擬ICollection的<Order
> & GetOrders()= 0;
}
------ <在託管C++ DLL> -------
類OrderCollection:公共的ICollection <Order
>
{
//
};
類LocalFactory:公共器IFactory
{
公共:
虛擬ICollection的<Order
> & GetOrders(){返回m_orders; }
private:
OrderCollection m_orders;
};
我已經縮小了模板覆蓋GetOrders。在託管dll中的代碼會導致一個對話框打開「應用程序無法正確啓動(0xc000007b),這只是託管加載器引發的STATUS_INVALID_IMAGE_FORMAT HRESULT。刪除代碼允許它運行。那麼模板有什麼問題爲什麼我不能在託管的DLL中使用它
另一個線索,不知道這是否是一個分心..我正在編譯一個32位應用程序,並運行在Win7 x64上。只要模板沒有跨越dll從非託管到管理。
什麼殺我是我有幾個非託管的C++模板,完全生活在託管的DLL中,他們工作得很好,它只是模板之間的交叉似乎給我不好的形象的dll。
這是正確的。 .NET泛型可以在運行時暴露,但C++模板是構建時間,不能在運行時暴露。 – Puppy 2010-07-20 16:07:10