C#调用C/C++写的dll

C++ 代码:

头文件:

extern "C" _declspec(dllexport)bool openWindow(char*classname,char*name);

EXTERN_C _declspec(dllexport)bool openWindow(char*classname,char*name);

extern "C"{
    _declspec(dllexport)bool openWindow(char*classname,char*name);
}
EXTERN_C{
_declspec(dllexport)bool openWindow(char*classname,char*name);
}

cpp中:
和普通方法一样

bool openWindow(char*classname, char*name)
{
    hwnd = FindWindowA(classname,name);
    if (hwnd == 0)return false;
    tid=GetWindowThreadProcessId(hwnd, &pid);
    handle = OpenProcess(PROCESS_ALL_ACCESS,false,pid);
    if (handle == 0)return false;
    return true;
}

C#代码

[DllImport(@"C:\Users\Liziguo\source\repos\C Sharp\Debug\waigua.dll",
EntryPoint = "openWindow", 
CallingConvention = CallingConvention.Cdecl)]

extern static bool openWindow(string classname,string name);

第一个参数 dll路径
第二个参数 指定函数名,如果C#中的函数名和C++中的函数名一样的话可以不填
第三个参数 解决:对 PInvoke 函数的调用导致堆栈不对称问题,照着填就好

如果是C#引用C#编写的dll直接在项目那右键添加引用就可以了,记得导入命名空间

若有不正之处,请多多谅解并欢迎指正。

你可能感兴趣的:(C#调用C/C++写的dll)