Как позвонить в родную паделю C ++ от C #
-
21-12-2019 - |
Вопрос
Я не так хорош в C ++ но,.. Например, у меня есть это
#define GETSomthing_API __declspec(dllexport)
extern GETSomthing_API int nGetSomthing;
.
и метод, который я хочу импортировать, как это
GETSomthing_API int GetSomthing(const char* szConfigPath, char *A, int B)
.
Как я могу назвать это из C #?
рядом с Я думаю, что моя проблема с типом параметра (Const Char *) в стороне C ++, какой равный тип в C # для него!const char *
Спасибо,
Решение
или
Использование: [dllimport ("xxx.dll")] xxx.dll компилируется c ++
Надеюсь, эта помощь.
Другие советы
Есть несколько способов призвать в родной код из C #.Самый простой, вероятно, использовать P/Invoke
.
Скажите, что ваша функция похожа:
extern "C" int nGetSomeThing(void);
.
И он скомпилирован в файл yourdllname.dll, вы можете использовать P / Invoke, чтобы напрямую вызовел неуправляемый код следующим образом из C # CODE:
public static class interop
{
[DllImport("YourDllName.dll")]
static extern public int nGetSomeThing(void);
}
...
interop.nGetSomething() // call to the native function
.
Обратитесь: http://msdn.microsoft.COM / EN-US / Библиотека / AA288468% 28VS.71% 29.aspx .
Если у вас много функций со сложными подписями, вы, вероятно, должны перейти на слой взаимодействия в C ++ / CLI. Обратитесь: http://www.codeProject.com/articles/19354/quick-c-cli-loarn-c-clible-less-than-10-minutes
Я только что добавил проверку __cplusplus, и он работал!
#ifdef __cplusplus
.
extern "C" {
endif
GETSomthing_API char* GetAgentId(const char* szConfigPath, char *szA, int ASize);
.
ifdef __cplusplus
}