2021-09-13 01:58 AM
Hello developers,
I am maintaining a plugin for a couple of last versions of the Archicad. The following code had been working overtime. I use it to import my DWG files as LibPart through the plugin. Since AC24 it has been getting a crush on ACAPI_Command_Call. When I try to import the same file manually, it works then.
API_ModulID mdid = { 1198731108, 1322668197 }; // DXF/DWG add-on
GSErrCode err;
// call the Dxf add-on
GSHandle parHdl;
err = ACAPI_Goodies(APIAny_InitMDCLParameterListID, &parHdl);
if (err != NoError) {
WriteReport_Err("APIAny_InitMDCLParameterListID", err);
}
if (err == NoError) {
IO::URL url;
dwgFileLoc.ToURL(&url);
API_MDCLParameter par;
BNZeroMemory(&par, sizeof(par));
par.name = "FileName";
par.type = MDCLPar_string;
char str[512] = { 0 };
CHTruncate((const char*)url, str, sizeof(str));
par.string_par = str;
err = ACAPI_Goodies(APIAny_AddMDCLParameterID, parHdl, &par);
if (err != NoError) {
WriteReport_Err("ACAPI_Command_Call", err);
}
if (err == NoError) {
err = ACAPI_Command_Call(&mdid, 'OOBJ', 1, parHdl, nullptr, true);
// ^-- From this call it gets access valiation exception since AC 24.
if (err != NoError) {
WriteReport_Err("ACAPI_Command_Call", err);
}
else WriteReport("No error.");
}
}
In my case, DXF/DWG addon does its usual job. I am asked about layers to import in. I am asked about a few of SHX files which I just skip. Then it ends with an exception:
Exception thrown at 0x00007FFDEC97EA72 (DXF_DWG_Engine.dll) in Archicad.exe: 0xC0000005: Access violation reading location 0x0000000000000000.
Exception rises from DXF_DWG_Engine.dll and it seems it falls on dereferencing of a null pointer. I am pretty sure that the DXF DWG addon is working well. There have to be something wrong with how I am using it or with the interaction between other plugins. By the way in API DevKit's example CommunicationManager there is a similar code and the same exception rises from it as well for me (Communication_Manager.cpp line 454).
I know this may take a long time. Please let me know if you figure something out.
Best regards
Tomas