Алексей1153++, если они лежат рядом, я в таких случаях анализирую путь вызывающего модуля и при загрузке вызываемого подставляю этот путь.
я также, но тут дело в том, что путь инстанса такой, какой был а загружающего DLL модуля. В данном случае это эксель в папке office , а сама DLL лежит совершенно в другом месте, путь к ней где-то в реестре. Может быть, есть некие стандартные функции - достать путь к "телу" DLL COM-объекта?
А я пока убрал ресурсную DLL... А то я там застрял
Добавлено через 1 час, 41 минуту и 37 секунд:усё, жестокий тупняк немного отпустил ))
вот тут путь прописан
HKEY_CLASSES_ROOT\CLSID\{9F60A0F1-EC4A-46F4-8965-5D03BBEA92A8}\InprocServer32\default
Добавлено через 4 минуты и 11 секунд:вот самая полезная из книжек, найденных мной на эту тему ))
https://club.shelek.ru/download.php?id=77Добавлено через 1 час, 24 минуты и 45 секунд:добыл путь так:
//будет содержать путь к DLL, оканчивающийся бэкслешем
std::wstring m_pathToDLL__;
{
CLSID clsid;
std::wstring temp_pathToDLL__;
CLSIDFromProgID(L"TMV1C_Component.SlavedClient", &clsid);
std::wstring strGuid=L"{00000000-0000-0000-0000-000000000000}";
if(sizeof(clsid.Data4)==8)
{
swprintf_s(&strGuid[0],strGuid.size()+1,L"{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}"
,clsid.Data1,clsid.Data2,clsid.Data3
,clsid.Data4[0],clsid.Data4[1]
,clsid.Data4[2],clsid.Data4[3]
,clsid.Data4[4],clsid.Data4[5]
,clsid.Data4[6],clsid.Data4[7]
);
std::wstring key=L"CLSID\\"+strGuid;
key+=L"\\InprocServer32";
HKEY hk=0;
if(ERROR_SUCCESS==RegOpenKey(HKEY_CLASSES_ROOT,key.c_str(),&hk))
{
temp_pathToDLL__.resize(MAX_PATH,0);
LONG size_in_bytes=(temp_pathToDLL__.size()+1)*sizeof(temp_pathToDLL__[0]);
if(ERROR_SUCCESS==RegQueryValue(hk,0,&temp_pathToDLL__[0],&size_in_bytes) && size_in_bytes)
{
int pos=temp_pathToDLL__.find_last_of(L'\\');
if(pos!=temp_pathToDLL__.npos)
{
temp_pathToDLL__.erase(pos+1);
m_pathToDLL__=temp_pathToDLL__;
}
}
RegCloseKey(hk);
}
}
}
::MessageBox(0,m_pathToDLL__.c_str(),L"path",MB_SYSTEMMODAL);