C#调用C++库(dll)的函数

C++函数定义

extern "C" __declspec(dllexport) void ThundbirdPhaseLocalFolder(const string* localFolderPaths,const string* zipFolders, bool (*isProcess)())
{
    const char* localFolderPath = localFolderPaths->c_str();
    const char* zipFolder = zipFolders->c_str();    

}

C#函数定义

namespace TestThunderbirdZipperCSharp
{
    class CPPDLL
    {
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate bool IsProcess();

        [DllImport("ThunderbirdLocalFolderZipper.dll")]
        public static extern void ThundbirdPhaseLocalFolder([MarshalAs(UnmanagedType.LPWStr)]string localFolderPath, [MarshalAs(UnmanagedType.LPWStr)]string zipFolder, [MarshalAs(UnmanagedType.FunctionPtr)]  IsProcess isProcess);
    }
}

C#调用

namespace TestThunderbirdZipperCSharp
{
    class Program
    {
        static bool flag = true;

        static bool callback()
        {
            return flag;
        }

        static void Main(string[] args)
        {
            string localFolderPath = "";
            string zipFolder = "";

            CPPDLL.ThundbirdPhaseLocalFolder(localFolderPath, zipFolder, callback);
        }
    }
}
时间: 2024-11-06 07:31:39

C#调用C++库(dll)的函数的相关文章

Python直接调用C库的printf()函数打印一条消息

github博客传送门 csdn博客传送门 话不多说直接上代码 # 直接从 C 库中调用 printf()函数打印一条消息 # Windows 中的 C 库位于 C:\WINDOWS\system32\msvcrt.dll,Linux 中的 C 库位于/lib/libc.so.6 import ctypes # 导入ctypes包 # msvcrt = ctypes.cdll.LoadLibrary("C:\WINDOWS\system32\msvcrt.dll") # 等同于msvc

16位汇编 多文件 intel汇编 编译器masm5.0 调用子程序库即静态库的自定义函数 WINDOWS

;以下是16位汇编 创建静态库,并调用静态库中的函数 ;多文件汇编格式 ;编译方法(此处用的是masm 5.0,如果是其他的编译器,有可能不能编译) ;第一种,编译方法 ;1.masm main.asm  生成.obj文件 ;2.masm lib.asm  生成.obj文件 ;3.link main.obj lib.obj 生成.exe文件 ;第二种,编译方法 ;1.masm main.asm  生成.obj文件 ;2.masm 16lib.asm  生成.obj文件 ;3.lib 16lib.

Golang调用windows下的dll动态库中的函数

Golang调用windows下的dll动态库中的函数 https://blog.csdn.net/xuduorui/article/details/78943331 原文地址:https://www.cnblogs.com/yuanjiangw/p/12196004.html

C#调用c++的动态库dll演示例程

1.首先编写c++动态库 extern "C" __declspec(dllexport) int __stdcall add(int x, int y) { return x + y; } extern "C" __declspec(dllexport) extern "C"使得在C++中使用C编译方式成为可能.在"C++"下定义"C"函数,需要加extern "C"关键词.用exte

Java框架JNA调用C方法(windows链接库dll文件、linux链接库so文件)

介绍 给大家介绍一个最新的访问本机代码的Java框架-JNA. JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架. JNA项目地址:https://jna.dev.java.net/ 非常强大.易用,功能上类似与.NET的P/Invoke. 不堪回首的JNI 我们知道,使用JNI调用.dll/.so共享类库是非常非常麻烦和痛苦的. 如果有一个现有的.dll/.so文件,如果使用JNI技术调用,我们首先需要另

VC++编写DLL导出函数及其调用方法

DLL (Dynamic Link Library)动态链接库,是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件,其优点主要有:1. 有助于节省内存:2. 有助于资源共享:3. 不需编译的软件系统升级:4. 支持多语言程序.当然,有的时候我们也可以将一些核心的或者不愿意公开提供的函数编写为DLL,从而起到隐藏和保护的作用. 下面结合实例详细说明在Visual Studio 2008 SP1 IDE中如何创建.编写和导出VC++ MFC DLL,以及如何调用生成的DLL.(完整

C#调用非托管动态库中的函数方法

C#如何调用一个非托管动态库中的函数呢,比如用VC6写的动态库,总之C#调用动态库的过程是比Java调用DLL动态库方便快捷多了,下面举例说明这个过程. 1.创建一个非托管动态库 代码如下: 代码如下: //这一句是声明动态库输出一个可供外不调用的函数原型. extern   "C"  __declspec(dllexport)  int  add( int ,  int ); int  add( int  a, int  b) { //实现这个函数returna+b; } 除声明外,

无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”。此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来 自 HRESULT:

无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”.此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错. (异常来 自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY)) 经过多般折腾,还是没什么更好的办法.

使用 __declspec(dllimport) 能够优化对DLL导出函数的调用.

使用 __declspec(dllimport) 能够优化对DLL导出函数的调用. 不使用时: [DLL] #ifdef THEDLL_EXPORTS #define THEDLL_API __declspec(dllexport) #else #define THEDLL_API __declspec(dllimport) #endif // THEDLL_API int fntheDll(void); [EXE] #include "..\\theDll\\theDll.h" #p