Спасибо SLaks за запрос моего кода C / C ++. Вот где проблема была найдена. Это было проще, чем я думал. Я обнаружил ошибку при составлении кода, чтобы показать вам.
Я знаю, что C и C ++ - это не одно и то же, структура плагина немного странная. Большая часть кода была сгенерирована мастером. Я просто должен был заполнить мой код. Это файл cpp, но код вроде C. Ну, я думаю, это не по теме.
Вот, я выделил самые важные строки.
// the dll is connected via COM, using the type library file that regasm generated
#import "[path]\myCSharpDll.tlb" raw_interfaces_only
using namespace myCSharpDll;
static void OnActivate (IfmDocument, Widget);
//off topic: this are the weird lines the wizard put in my way
#ifdef __cplusplus
extern "C"
#endif /* __cplusplus */
// when the plugin is called by the host program, this function is called
static void OnActivate (IfmDocument pDoc, Widget button)
{
InitializeIntermediate(pDoc);
Timestep1(...);
}
static void InitializeIntermediate(IfmDocument pDoc)
{
// Initialize COM.
HRESULT hr = CoInitialize(NULL);
IEPAccessPtr pIEPAccess(__uuidof(EPAccess));
double result = -1;
pIEPAccess->InitializeEP (&result);
...
}
static void Timestep1(...)
{
IEPAccessPtr pIEPAccess(__uuidof(EPAccess));
double result = -1.1;
pIEPAccess->Timestep (...);
...
// now I get a wrong result back here, because this call leads to nowhere as
// the connector object in the dll is void
}
Я понял, что запрашиваю второй экземпляр с этой строкой
IEPAccessPtr pIEPAccess(__uuidof(EPAccess));
Так что я изменил этот указатель на один экземпляр, и все в порядке. Спасибо за ваши комментарии!