Передача строкового массива в c программирование из C #

2

Я вызываю неуправляемый код программирования C из управляющего кода С#.Net. Но я не могу передать строковый массив в качестве параметра для функции из .Net Функция в C:

dllmain(const int argc, const char *argv[]){}

Пожалуйста, помогите мне, как я могу назвать эту функцию с C Sharp.Net

Спасибо.

Теги:

2 ответа

1

Вот как вы можете это сделать:

Код С#:

  • Объявить функцию 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)
    {
        :
    }
    

Надеюсь, это будет полезно для вас.: -)

  • 0
    вопрос касался массива строк, а не только одной строки
1

Добавьте в атрибут argv следующие атрибуты при объявлении функции в .net:

[In][MarshalAsAttribute(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPStr)]

Вы также должны добавить свойство CharSet=CharSet.Unicode к атрибуту DllImport, примененному к внешней функции.

  • 0
    Привет! Ваш способ соединения неуправляемого кода с управляемым кодом работает нормально, но когда я передаю аргументы по ссылке ref, тогда она не работает. Данные изменяются автоматически в аргументах. Пожалуйста, помогите мне. Спасибо
  • 0
    Что именно происходит?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню