Динамическая библиотека C++ DLL Lib_LR.dll:
Объявление функции:
DLL_API_LR недействительным GetAuthInfo(char* strCode);
Определение функции:
Два входных параметра, два выходных параметра
void GetAuthInfo (int inPrama1, char * inParam2, int outParam1, char * outParam2)
{ char buff [2048]; набор памяти (бафф, 0, 2048); std::ifstream inFile("license.lr", std::ios::binary); если (inFile.fail()) { return; } else { inFile.read(buff, sizeof(temp)); inFile.close(); } memcpy(outParam2, buff, outParam2.length());
строка strCode=outParam2;
outParam1=strCode.length();
}
Процесс вызова С#:
Ссылка на функцию:
[DllImport("Lib_LR.dll", EntryPoint = "GetAuthInfo", CallingConvention = CallingConvention.Cdecl)]
public static extern void GetAuthInfo(ref int InParam1, string nInPrama2, StringBuilder strCode);
вызов функции:
интервал inParam1=0;
внутренний параметр1=0;
строка inParam2 = "Тест";
StringBuilder outParam2 = новый StringBuilder (1024);
//Примечание: при вызове функции параметр экспорта типа int должен добавлять ref, а параметр экспорта строки должен объявлять тип StringBuilder
GetAuthInfo (inParam1, inParam2, ссылка outParam1, outParam2);
Возникшие проблемы:
1. Несоответствие платформы:
Проект C# — это проект webapi, основанный на ядре .net. Платформой компиляции по умолчанию является любой процессор, а платформой проекта C++ DLL по умолчанию — x86. Проблема соответствия. Вы можете попытаться решить ее следующими способами: выбрать x86 или x64 при компиляции проектов C++ DLL и C# (исходя из того, что операционная система 64-битная).
2. Проблема с искаженным кодом:
При вызове функции GetAuthInfo полученный strCode искажается.Решение, приведенное в Интернете, состоит в том, чтобы изменить метод объявления параметра функции public static extern voidGetAuthInfo([MarshalAs(UnmanagedType.LPStr)] StringBuilder strCode). Но я попробовал этот метод, он не работал. Наконец, это решается модификацией исходного кода DLL: добавьте outParam2[strCode.length()] = '\0' в конце функции GetAuthInfo, эта строка кода предназначена для добавления терминатора в конец массива строк. .