我在C ++方面不太好 但,.. 例如,我有这个
#define GETSomthing_API __declspec(dllexport)
extern GETSomthing_API int nGetSomthing;
我要像这样导入的方法
GETSomthing_API int GetSomthing(const char* szConfigPath, char *A, int B)
我如何从C#中调用它?
旁边, 我认为我的问题在于C ++方面的参数类型(const char *),它在C#中的相同类型是什么! const char *
谢谢,
答案 0 :(得分:2)
或
使用:[DllImport(“xxx.dll”)] xxx.dll是由C ++编译的
希望得到这个帮助。
答案 1 :(得分:1)
从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
答案 2 :(得分:0)
我刚刚添加了__cplusplus检查,它确实有效!
#ifdef __cplusplus
extern“C”{
GETSomthing_API char* GetAgentId(const char* szConfigPath, char *szA, int ASize);
}