Я не так хорош в 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 #:
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/library/aa288468%28VS.71%29.aspx.
Если у вас много функций со сложными сигнатурами, вам, вероятно, следует перейти на уровень взаимодействия в C ++ / CLI.
См .: http://www.codeproject.com/Articles/19354/Quick-C-CLI-Learn-C-CLI-in-less-than-10-minutes
Я только что добавил проверку __cplusplus, и это сработало!
#ifdef __cplusplus
extern «C» {
GETSomthing_API char* GetAgentId(const char* szConfigPath, char *szA, int ASize);
}