C#调用C++动态库

1、若C#调用VC的动态库,而dll中使用了MFC则须将MFC静态链接到dll中。

2、C#调用C++的动态库有三种方法:COM组件、托管代码、非托管代码。

  COM组件需客户端注册,若客户无管理员权限则无法使用;

  托管代码可以将dll中的类导出,但需要写托管代码,添加工作量且代码看上去有点**;

  非托管代码不能导出dll中的类,只能导出函数,但好处是dll比较正统,可以给C/C++/C#使用。

3、C#调用C++动态库时需留意参数传递问题,dll中的接口字符串类型最好用char*。

4、传入参数string对应接口中的char*, out 参数用StringBuilder, 注意使用unsafe。若在其它类中使用导出函数,需使用public关键字。

[DllImport(@"HIDUSBLib.dll", EntryPoint = "Receive")]
public extern unsafe static bool Receive(string devName,
                                                            [MarshalAs(UnmanagedType.LPStr)]StringBuilder buf,
                                                            int bufLen,
                                                            int* nRecvLen,
                                                            int timeout);
时间: 2024-10-11 15:29:45

C#调用C++动态库的相关文章

调用 C 动态库

调用 C 动态库 由 王巍 (@ONEVCAT) 发布于 2015/11/04 C 是程序世界的宝库,在我们面向的设备系统中,也内置了大量的 C 动态库帮助我们完成各种任务.比如涉及到压缩的话我们很可能会借助于 libz.dylib,而像 xml 的解析的话一般链接 libxml.dylib 就会方便一些. 因为 Objective-C 是 C 的超集,因此在以前我们可以无缝地访问 C 的内容,只需要指定依赖并且导入头文件就可以了.但是骄傲的 Swift 的目的之一就是甩开 C 的历史包袱,所以

JNI_Android项目中调用.so动态库

JNI_Android项目中调用.so动态库 2014年6月3日 JNI学习 参考:http://blog.sina.com.cn/s/blog_4298002e01013zk8.html 上一篇笔者介绍了如何使用Java代码调用DLL动态库中的C/C++方法,似乎已经是很久以前的做法了,遇到的错误笔者还未找到解决方案,但动态库着实是找到的,只是无法调用相应的方法.本篇博客来介绍一下如何在Android项目当中使用NDK生成.so动态链接库,并在程序中使用. 1. 在Eclipse中创建项目:T

关于32位和64位部署出现C#调用delphi动态库DLL不成功的问题

由于项目中调用了动态库,这些动态库放在C:\Windows\System32下面,但是当部署到了64位的机器上可能就有问题了,最近这个问题就纠结了半天,在本机32为系统上测试动态调用ddl成功了,部署到64位Window Server2008上面也没问题,可是为什么到了64位的WIN7系统上出了问题呢?        最后才发现原来原来是DLL的位置不对,那么DLL到底该放到那呢?        如果细心的你,你会发现在C:\Windows\目录下面有两个文件夹:System目录和System3

c#调用c++动态库的一些理解

c#调用c++动态库一般我们这样写 [DllImport("UCamer.dll", CallingConvention = CallingConvention.Winapi)] public extern static void Disp_Destroy(IntPtr hShow); DllImport的第一个参数UCamer.dll是动态库dll的路径,此dll放在程序运行的根目录或者c:windows/sytem32下 CallingConvention 参数是c#调用c++的方

C#总结(四)调用C++动态库

由于公司很多底层的SDK,都是C++开发,上层的应用软件却是C# Winform程序.在实际工作的过程中,就经常碰到了C# 程序调用C++ 动态库的问题.最近一直在和C++ 打交道,C# 怎么调用C++ 类库函数.也遇到了一些问题,所以就来总结总结C#程序调用C++动态库时的各种坑. 1. 可能遇到的问题: C#在调用动态库的过程中我也遇到了以下一些问题: 1.C++中有指针,C#中需要使用指针吗? 由于C++中的动态库中有指针参数,因此我也是用.NET的不安全代码,使用了C#的指针,但是也还是

使用ctypes在Python中调用C++动态库

使用ctypes在Python中调用C++动态库 入门操作 使用ctypes库可以直接调用C语言编写的动态库,而如果是调用C++编写的动态库,需要使用extern关键字对动态库的函数进行声明: #include <iostream> using namespace std; extern "C" { void greet() { cout << "hello python" << endl; } } 将上述的C++程序编译成动态链

electron调用c#动态库

electron调用c#动态库 新建C#动态库 方法要以异步任务的方式,可以直接包装,也可以写成天然异步 代码如下 public class Class1 { public async Task<Object> Invoke(object input) { return Helper.SayHi("Invoke1:" + (string)input); } public async Task<Object> Invoke2(object input) { ret

thrift 编译调用boost动态库

In the project properties you must also set HAVE_CONFIG_H as force include the config header: "windows/confg.h" By default lib/cpp/windows/force_inc.h defines: #define BOOST_ALL_NO_LIB 1 #define BOOST_THREAD_NO_LIB 1 This has for effect to have

JNI_Android项目中调用.so动态库实现详解

转自:http://www.yxkfw.com/?p=7223 1. 在Eclipse中创建项目:TestJNI 2. 新创建一个class:TestJNI.java package com.wwj.jni; public class TestJNI { public native boolean Init(); public native int Add(int x, int y); public native void Destory(); } 以上代码声明三个本地方法. 3. 编译JNI