Я вызываю неуправляемый код программирования C из управляющего кода С#.Net. Но я не могу передать строковый массив в качестве параметра для функции из .Net Функция в C:
dllmain(const int argc, const char *argv[]){}
Пожалуйста, помогите мне, как я могу назвать эту функцию с C Sharp.Net
Спасибо.
Вот как вы можете это сделать:
Код С#:
Объявить функцию C, которую вы хотите вызывать из С#
[DllImport("<DLL_File_Name>.dll", CharSet = CharSet.Auto, EntryPoint = "dllmain", ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
public static extern void dllmain(ref string str1);
Определите строку
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string str1;
Вызвать функцию C из кода С#
dllmain(ref str1);
C Код:
Прототип функции
__declspec(dllexport) void __stdcall dllmain(char *str1);
Определение функции
void__stdcall dllmain(char *str1)
{
:
}
Надеюсь, это будет полезно для вас.: -)
Добавьте в атрибут argv
следующие атрибуты при объявлении функции в .net:
[In][MarshalAsAttribute(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPStr)]
Вы также должны добавить свойство CharSet=CharSet.Unicode
к атрибуту DllImport, примененному к внешней функции.