У меня есть управляемая DLL C ++, которая динамически связывается с неуправляемой DLL C ++.Управляемый C ++ выводит несколько неуправляемых классов из абстрактных интерфейсов в неуправляемой dll.
Это прекрасно работает.ICustomer.h в неуправляемой dll
// uses macro __declspec(dllexport)
class EXPORT_API ICustomer
{
public:
virtual void PlaceOrder() = 0;
//...
};
LocalCustomer.h в управляемом C ++
#include "unmanagedlib/ICustomer.h"
//an unmanaged derived class defined in the managed dll
class LocalCustomer : public ICustomer
{
public:
void PlaceOrder();
//...
};
LocalCustomer используется в управляемой dll.Я могу передать его функциям в неуправляемой DLL, и все это прекрасно работает.
Вот проблема.Я получаю STATUS_INVALID_IMAGE_FORMAT при запуске, когда пытаюсь реализовать интерфейс, который предоставляет шаблон.
Не запускается.в неуправляемом Dll
stuct Order
{
double price;
//...
};
template<typename T>
class EXPORT_API ICollection<T>
{
//...
};
class EXPORT_API IFactory
{
public:
virtual ICollection<Order>& GetOrders() = 0;
}
в управляемом C ++ dll
class OrderCollection : public ICollection<Order>
{
//...
};
class LocalFactory : public IFactory
{
public:
virtual ICollection<Order>& GetOrders() { return m_orders; }
private:
OrderCollection m_orders;
};
Я сузил его до переопределения шаблона GetOrders.Наличие кода в управляемой dll приводит к открытию диалогового окна: «Приложение не может запуститься правильно (0xc000007b), что является просто STATUS_INVALID_IMAGE_FORMAT HRESULT, запускаемым управляемым загрузчиком. Удаление кода позволяет ему запускаться.? Почему я не могу использовать его в управляемой dll.
Еще одна подсказка, не уверен, что это отвлекает от работы ... Я собираю 32-разрядное приложение и работаю на Win7 x64. Как я уже сказалс прекрасно работает, пока шаблон не пересекает dll из неуправляемого в управляемый.
Меня убивает то, что у меня есть несколько неуправляемых шаблонов C ++, которые полностью живут в управляемой dll и работают нормально.шаблоны, пересекающиеся между dll, которые, кажется, дают мне плохое изображение.