Поиск точки входа после преобразования C ++ exe в dll и использование ее в C #

Мне нужно преобразовать исходный код C ++ File.exe в File.dll. Для этого я изменяю тип конфигурации этого источника на динамическую библиотеку (.dll), а Visual Studio создает файл File.dll вместо File.exe.

Теперь я пытаюсь использовать этот File.dll в мой проект C #. Эта точка входа dll похожа на:

   int wmain(int argc, wchar_t* argv[])
{
// codes
}

после этого я передаю аргументы в File.exe в CMD, например:

   File.exe -l  -a "This is first arg !"

Но теперь все усложняется. Я знаю, что использование C ++ dll в C # -код похоже на:

        [DllImport(@"File.dll" , EntryPoint = "wmain")]
private static extern int wmain(int a , string arg);

Мои вопросы :

1.Приведенный ниже код неправильный, потому что я не могу объявить (wchar_t * argv []) как переменную C #?!

2. Если я запускаю приведенный ниже код в C #, это дает: 'Unable to find an entry point named 'wmain' in DLL 'File.dll'.' Так что мне кажется, что сначала мне нужно сделать что-то, чтобы прояснить точку входа в C #. Что это такое ?!

Обновление 1: Кажется, что эта ссылка У меня такой же сценарий для моего первого вопроса, но разница в том, что я использую массив и не могу найти класс, который совпадает с (wchar_t) в c #.

1

Решение

[DllImport(@"File.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]

Я на самом деле не использую C #, но этот ответ был выше строки, которая может решить вторую проблему.

Что касается первой проблемы, вам придется проверить следующую, чтобы увидеть, работает ли она, но так как IntPtr такой же размер, как указатель, он должен работать для wchar_t* argv[], Может быть. О, почти забыл, вам может понадобиться unsafe ключевое слово.

public static extern int wmain(int argc, MarshalAs(UnmanagedType.LPArray)] IntPtr[] argv);

Я получил эту идею от Вот.

Опять же, я почти никогда не использовал C #, но, надеюсь, это поможет вам в правильном направлении.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector