Несколько вопросов о совместимости-экспортированные функции C++ для использования в C#
Всем Привет,
У меня есть код, написанный на C++, который мне нужно использовать в приложении C#.
Ниже приведен синтаксис двух методов, которые мне нужно использовать в моем приложении C# :
long __declspec (dllimport) MyMethod1(const wchar_t* inputFileName, const wchar_t* outputFileName) __declspec (dllimport) int __stdcall MyMethod2(void ** pMyVoidPtr, MY_CUSTOM_STRUCT* pMyCustomStruct);
Я мог бы использовать их в своем приложении C++, как показано ниже:
MyMethod1(_T("C:\\InputFile.txt"), _T("C:\\OutputFile.txt")); MY_CUSTOM_STRUCT myCustomStruct; void* pVoidPtr = NULL; MyMethod2(&pVoidPtr, &myCustomStruct);
В приложении C++ я мог бы получить желаемые результаты. Но в приложении C# указатель pVoidPtr всегда возвращает NULL.
Я пробовал использовать ref, out IntPtr в качестве параметров, но все потерпело неудачу.
Может ли кто-нибудь предоставить мне синтаксис для одного и того же приложения в C# (для обоих методов)?
Спасибо и с уважением,
Кишор Редди
Что я уже пробовал:
[DllImport("Exported Dll Path")] long static extern MyMethod1(string strInputName, string strOutputName); [DllImport("Exported Dll Path")] int static extern MyMethod2(out IntPtr pVoidPtr, MY_CUSTOM_STRUCT myCustomStruct); [DllImport("Exported Dll Path")] int static extern MyMethod2(out IntPtr pVoidPtr, IntPtr myCustomStruct);
Garth J Lancaster
ладно...
почему вы используете DllImport на стороне c++? т. е. "long _ _ declspec (dllimport)" разве вы не должны экспортировать эти функции ?
Я бы также посмотрел на дискуссию о "структурах данных" между Дэвидом и люком в этой статье как на ответ на "то же самое" о маршалинговых структурах https://www.codeproject.com/Articles/138614/Advanced-Topics-in-PInvoke-String-Marshaling
. и, может быть, эта статья, так как Дэвид упоминает об этом http://www.developerfusion.com/article/84519/mastering-structs-in-c/