Я пытаюсь включить C++ библиотека (DLL) в моем C# проекта, но каждый раз, когда я делаю, что я получаю следующее сообщение об ошибке в VS2012Как использовать C библиотеки DLL ++ из C#
A reference to 'C:\Users\HiepDang\Desktop\mydll.dll' could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component.
Когда я пытаюсь добавить Com + Component, появляется следующее сообщение об ошибке в окне
Один или несколько файлов не содержат библиотек компонентов или типов. Эти файлы не могут быть установлены.
Ошибка 80110425 произошла.
Произошла неизвестная ошибка. Вы должны проверить всю документацию для решения. Если дополнительная информация не доступна, пожалуйста, контракт технической поддержки в
Я следующий поток here и here, но моя проблема не решена.
В C++, я могу использовать DLL, как:
//Header
extern "C" __declspec(dllimport) int mymethod(const char *key, char *data, size_t buflen);
//Code test
const char* key = "test";
char* data = new char[1024];
int buflen = 1024;
int result = mymethod(key,data, buflen);
В C#, я использую библиотеку DLL, как:
//define dll
[DllImport("mydll.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern int mymethod([MarshalAs(UnmanagedType.LPTStr)]string key, [MarshalAs(UnmanagedType.LPTStr)]string data, uint buflen);
//method test
private static int testdll()
{
string key = "123456789";
string buf = string.Empty;
mymethod(key, buf, 1024);
return 0;
}
Можете ли вы сказать мне какие-либо решения, чтобы решить эту проблему.
P.s: Мой английский не очень хорошо. Прошу прощения, если что-то неудобно
Отредактировано: Я объясняю переменную в методе в dll. «ключ», поскольку ввод строки имеет 8-13 символов, mymethod будет зашифрован для генерации «buf». Мне нужна переменная «buf».
Как говорят ссылки, используйте 'DllImport'. ** Не пытайтесь добавить ссылку, щелкнув правой кнопкой мыши ** Ссылки ** и выбрав * * Добавить ** Просто используйте существующий код 'DllImport' C# – MickyD
@MickyDuncan: Спасибо за ответ, но код C#, который я опубликовал, не соответствует моему требованию. Когда вызов mymethod, значение« buf »должно измениться. Следуйте C# -коду, Я просто получаю сообщение об ошибке, что «значение« ключ »недопустимо». Это происходит, когда переменная ключа недостаточно 8 символов. –
Обновите свой вопрос, чтобы отразить эти новые требования – MickyD