Александр Ривилис пишет:Цитатаvoid пишет:
Дело в том, что как я писал выше я думал получить лист аналогичным способом, но при использовании acdbHostApplicationServices() dbx не грузится, ругается AcRxDynamicLinker (((
Так быть не должно. Что-то у тебя не так. Приведенный код я проверил, создав тестовый dbx-файл и включив этот код в обработчик InitAppMsg. Какая версия AutoCAD? Какая версия ObjectARX? Какая версия MS VS? Если VS 2005, то отключена ли генерация и включение манифеста?
AutoCad 2008, ObjectARX 2009, из-за либ использую 2005 студию 2008 не катит.
это acrxEntryPoin:
void addEvalIdToRegistry()
{
//get the 'NumberField' Key location
HKEY hSoftKey = NULL;
HKEY hNumFldKey = NULL;
const TCHAR * acadkey = acrxProductKey();
const size_t nappKey = 1024;
TCHAR appkey[nappKey]=_T("");
_stprintf_s(appkey, nappKey, _T("%s\\Applications"),acadkey);
if (RegOpenKeyEx(HKEY_CURRENT_USER, appkey, 0, KEY_WRITE|KEY_READ,
&hSoftKey) == ERROR_SUCCESS)
{
DWORD dw;
if (RegCreateKeyEx(hSoftKey, _T("TDMSValues"), 0, REG_NONE,
REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
&hNumFldKey, &dw) == ERROR_SUCCESS)
{
//Add 'FIELDEVALUATORS' entry to 'TextFileField'
TCHAR evalId[14]=_T("TDMSValues");
RegSetValueEx(hNumFldKey,_T("FIELDEVALUATORS"),0,REG_SZ,(LPBYTE)evalId,sizeof(evalId));
}
}
}
void updateRegistry()
{
TCHAR moduleName[256];
::GetModuleFileName(_hdllInstance, moduleName, 256);
// Fill the AppInfo structure with our demand loading details.
AcadAppInfo appInfo;
appInfo.setAppName(_T("TDMSValues")); // Application name
appInfo.setModuleName(moduleName);// Module path
appInfo.setAppDesc(_T("AsdkTDMSValues")); // Description
appInfo.setLoadReason(// Specify when we want these to load
AcadApp::LoadReasons(
AcadApp::kOnCommandInvocation |
AcadApp::kOnLoadRequest));
appInfo.writeToRegistry(false,true);// Write the appInfo to the registry.
appInfo.writeGroupNameToRegistry(_T("TDMSValues_GROUP"));// Write the group name
// Write out all our commands (Global,Local).
appInfo.writeCommandNameToRegistry(_T("TDMSValues"),_T("tnf"));
addEvalIdToRegistry();
}
//-----------------------------------------------------------------------------
//----- ObjectARX EntryPoint
class CTDMSValuesApp : public AcRxDbxApp {
public:
CTDMSValuesApp () : AcRxDbxApp () {}
virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {
AcRx::AppRetCode retCode =AcRxDbxApp::On_kInitAppMsg (pkt) ;
m_textFileFieldLoader.registerLoader();
updateRegistry();
return (retCode) ;
}
virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {
AcRx::AppRetCode retCode =AcRxDbxApp::On_kUnloadAppMsg (pkt) ;
m_textFileFieldLoader.unregisterLoader();
return (retCode) ;
}
virtual void RegisterServerComponents () {
}
private:
AsdkTDMSValuesEvaluatorLoader m_TDMSValuesFieldLoader;
} ;
Спасибо за помощь.