Здравствуйте, NewEmptyName, Вы писали:
NEN>Сейчас декларация выглядит так:
Я так и думал.
NEN>Private Declare Function CreateObjectFromFile Lib "D:\WorkFlow\OrderFW\OrderFW\Debug\OrderFW.dll" (ByVal strLibrary As String, ByVal strClassName As String, ByVal ArrayDwordsPtr20 As Long) As Object
Т.е. считается, что функция возвращает IDispatch интерфейс, поэтому VB не проверяет и не запрашивает специально этот интерфейс. А Object и есть IDispatch*.
NEN>Функция выглядит так:
Неправильно. Лишняя косвенность не нужна, нужно правильно передать нужный интерфейс.
NEN>// IUnknown** __stdcall CreateObjectFromFile(LPCOLESTR strLibrary, LPCOLESTR strClassName, DWORD * ResPtr)
Vi2>>IDispatch* __stdcall CreateObjectFromFile(LPCOLESTR strLibrary, LPCOLESTR strClassName, DWORD * ResPtr)
NEN>{
NEN>// IUnknown** newobj =new IUnknown* ;// NULL;
Vi2> IDispatch* newobj = NULL;
NEN>//.......
NEN>// CreateInstance (NULL,IID_IUnknown,(void**)newobj) ;
NEN> CreateInstance (NULL,IID_IDispatch,(void**)newobj) ;
NEN>//.......
NEN> return (newobj);
NEN>}