Виртуальные функции C ++ DLL Cididia не могут быть вызваны из-за имени @ - PullRequest
0 голосов
/ 04 марта 2012

У меня есть друг, который сделал несколько классных функций, связанных с шифрованием и безопасностью, которые он сделал мне в C ++.Затем он использовал их средства массовой информации, чтобы сделать его более безопасным.

Он дал мне DLL, и я использовал функцию поиска функций, чтобы найти все функции.Но вот проблема.

У всех функций есть символ @, и когда в C # я использую важную DLL, она говорит, что не может скомпилировать код, потому что это синтаксическая ошибка в @.Например, имя функции может быть «CheckPassword_ @ 12», что странно, но C # не позволяет мне иметь это.

Есть что-то, чего мне не хватает, он не даст мне незащищенную DLL, потому что он не хочетлюди, если они взломают мое приложение, чтобы иметь возможность изменить его DLL.Я проверил несколько приложений и сам заполнил, но все имена функций появляются с @.

Спасибо!

1 Ответ

2 голосов
/ 04 марта 2012
[DllImport("security.dll", CallingConvention=CallingConvention.StdCall, ExactSpelling=true)]
private static extern IntPtr _passwordValid@8(string string_0, string string_1);

Это имеет больше смысла, чем ваш вопрос.Соглашение о вызовах StdCall ставит подчеркивание перед идентификатором, @n после идентификатора.Это оформление имени помогает отлавливать ошибки объявления в C-программе.Вы просто опускаете их, маршаллер pinvoke может перепроектировать имя экспорта свойства.StdCall является значением по умолчанию, так что это достаточно хорошо:

[DllImport("security.dll")]
private static extern IntPtr passwordValid(string string_0, string string_1);

Кстати, я хотел сказать EntryPoint вместо ExactSpelling в моем комментарии.

Еще одна деталь, вам может понадобиться использовать CharSetсобственность в декларации.Необходимость этого зависит от типа строки, которую использовал автор DLL.Разработчик DLL обычно также предоставляет файл .h с объявлениями функций.Такой файл .h также сказал бы passwordValid, а не _passwordValid@8.Убедитесь, что у вас есть законное право использовать эту DLL, отсутствие такого заголовочного файла очень необычно.

...