У меня есть сторонний DLL, и я должен использовать его функции в коде C++/CLI. Я пытаюсь DllImport это, но я получаю сообщение об ошибке:Функция Dllimport, которая возвращает struct
ошибка C33385: «msp_FormatMessage»: функция, которая имеет DllImport пользовательский attribite не может вернуть экземпляр класса
В C# эта проблема может быть решена используя StructLayout, но я не могу найти способ решить эту проблему в C++/CLI.
Определение функции: определение
[DllImport("drtl3.dll", EntryPoint = "msp_FormatMessage")]
extern "C++" msp_Message msp_FormatMessage(msp_Message* buffer, char type, char RT, char SA, char RTR_MC, unsigned short SAR_MCD, char dataWordCount, unsigned short data[], unsigned int bccw);
Struct:
typedef struct {
msp_WORD type;
msp_WORD dataWordCount;
msp_WORD bccw;
msp_WORD CmdWord1;
msp_WORD CmdWord2;
msp_WORD Data[32];
msp_WORD StatusWord1;
msp_WORD StatusWord2;
msp_WORD loopback;
msp_WORD bsw;
msp_WORD timetag;
msp_BYTE present;
msp_BYTE transmit;
msp_BYTE check;
msp_BYTE role;
} msp_Message;
Вы должны пометить вопросы 'C++/CLI' как таковые, многие люди, которые смотрят вокруг тега' C++ ', даже не знают, что он существует, поэтому вы должны быть явным об этом при запросе – PeterT
. Вы уверены, что результат возвращаются напрямую, а не как указатель? – svick
[Единственное 'msp_FormatMessage', которое я мог найти] (http://www.module.ru/upload/files/2604_rtl2gsw.pdf#page=47) делает именно это:' msp_Message * msp_FormatMessage ( msp_Message * buffer, msp_BYTE типа, msp_BYTE RT, msp_BYTE SA, msp_BYTE RTR_MC, msp_WORD SAR_MCD, msp_BYTE dataWordCount, msp_WORD * данные, msp_DWORD bccw); ' – svick