Здравствуйте, Vikong, Вы писали:
V>При регистрации напрямую, из программы, с помощью функции DllRegisterServer, регистрируется успешно, но при попытке создать объект из библиотеки, вылетает с ошибкой "OLE error code 0x80004005: Неопознанная ошибка"
Как это с помощью DllRegisterServer. ? Можете уточнить. С проблемой сталкивался регистрации нескольких длл из Wix и гуи. С гуи проблем небыло.
regsvr32 идёт с открытыми исходниками. Выдирал функцию оттуда. Вот по памяти может поможет
bool RegisterLibrary(CString dllName)
{
int iReturn = 0;
HRESULT (STDAPICALLTYPE * lpDllEntryPoint)(void);
const char _szDllRegSvr[] = "DllRegisterServer";
const char _szDllUnregSvr[] = "DllUnregisterServer";
HINSTANCE _hInstance;
BOOL bVisualC = FALSE;
BOOL bUnregister = FALSE;
LPCSTR pszDllEntryPoint = _szDllRegSvr;
LPTSTR ptszDllEntryPoint = NULL;
LPCTSTR pszDllName = NULL;
LPCTSTR pszTok;
size_t EntryPointSize = 0;
_hInstance = ::GetModuleHandle(NULL);
HINSTANCE hLib = LoadLibraryEx(dllName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
if (hLib < (HINSTANCE)HINSTANCE_ERROR)
return false;
// Find the entry point.
(FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, pszDllEntryPoint);
if (lpDllEntryPoint == NULL) {
return false;
}
// Call the entry point.
if (FAILED((*lpDllEntryPoint)())) {
return false;
}
return true;
}
Смысл такой что загрухаем как длл. И вызываем DllRegisterServer. CString dllName — путь указывать полный дабы избежать траблов с вистой. У меня покрайней мере работал.
ЗЫ выдрано и перекопипастено

из msdn
Здравствуйте, lollipop, Вы писали:
L>Здравствуйте, Vikong, Вы писали:
V>>При регистрации напрямую, из программы, с помощью функции DllRegisterServer, регистрируется успешно, но при попытке создать объект из библиотеки, вылетает с ошибкой "OLE error code 0x80004005: Неопознанная ошибка"
L> Как это с помощью DllRegisterServer. ? Можете уточнить. С проблемой сталкивался регистрации нескольких длл из Wix и гуи. С гуи проблем небыло.
L>regsvr32 идёт с открытыми исходниками. Выдирал функцию оттуда. Вот по памяти может поможет
...
L> Смысл такой что загрухаем как длл. И вызываем DllRegisterServer. CString dllName — путь указывать полный дабы избежать траблов с вистой. У меня покрайней мере работал.
L> ЗЫ выдрано и перекопипастено
из msdn
Грубо говоря, так и делаю. Одно отличие — программа написана на FoxPro 9
Вот код, он достаточно прозрачный:
DECLARE INTEGER DllRegisterServer ;
IN (lcServerPath)
IF DllRegisterServer() = 0
wait window nowait lcServerPath + " has been registered..."
ELSE
wait window lcserverPath + " could not be registered..." TIMEOUT 5
ENDIF
lcServerPath — полный путь к dll