c#调用c++库函数
如果是非托管的,就用DllImport,举例
using System;
using System.Runtime.InteropServices;
class MainApp
[DllImport("Kernel32")] //读取动态库文件
public static extern int GetProcAddress(int handle, String funcname);
给你讲一下我的经验:
首先 你在C#中调用的 是C++ 写的一个动态库。比如Kernel32.dll 中的 函数;
这个函数用C++写 有如下要求:
1、 必须为全局函数
2、 函数参数 必须为基本类型,也就是C++ 和C#都有的类型,否则你在public static extern int GetProcAddress(int handle, String funcname);
这里没有办法声明。 其余的 没什么了;
先前用VC写的程序生成的DLL,C#里能够调用么?
可以的话,在VC里传入参数为CString,而C#里是string,怎么传参数呢?
再者就是问,用VC写的DLL如果是一个导出类,而不是函数接口,C#里可以直接调用么?
第一个问题我遇到过, 可用如下方法解决:
VC++ 中为: int Set(char** str,int n); //将 String 改成 char** , C# 中没有与String对应的类型
C# 中为: int Set(ref string str,int n);
VC++ 中的 BOOL 类型对应 C# 中的 System.Int32 类型, 建议改动一下参数类型吧.
第二个问题,生成的DLL里的函数在一个类里面,这样的话在C#里需要实例化那个类么?怎么做
比如说,类solution里有函数int getch(int a);
我怎么调用这个getch函数??
建议在C++中另外写个函数封装一下, 如:
int Dllgetch(int a)
{
solution st = //实例化 类solution
return st.getch(a);
}
这个 Dllgetch(int a) 就可以提取出来供 C# 调用.
你的方法可以,我也解决了
将CString 改成了LPCTSTR
BOOL在C#中对应的是Boolean
c#调用c++库函数的更多相关文章
- Entity Framework 6 Recipes 2nd Edition(11-11)译 -> 在LINQ中调用数据库函数
11-11. 在LINQ中调用数据库函数 问题 相要在一个LINQ 查询中调用数据库函数. 解决方案 假设有一个任命(Appointment )实体模型,如Figure 11-11.所示, 我们想要查 ...
- 32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数
32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 (如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序) 一丶32位汇编编写Windows窗口程序 首 ...
- 《Android进阶》之第一篇 在Java中调用C库函数
在Java代码中通过JNI调用C函数的步骤如下: 第一步:编写Java代码 class HelloJNI{ native void printHello(); native void printStr ...
- 关于调用数据库函数executeUpdate抛出异常
2018.06.11写一个web程序的时候发现了一个问题,解决了好几天都没解决,并且也找不到问题所在.偶然百度找到了根源所在,希望可以帮到大家. 1 在调用这个函数的时候一直抛异常.刚开始我还以为是代 ...
- 多种方法实现实现全排列 + sort调用标准函数库函数的简述
全排列:所有不同顺序的元素组组成的一个集合.这里使用使用递归实现全排列. 使用递归算算法呢,首先我们先找一下结束的条件:我们要对一组元素(这里使用数字举例)实现全排列,临界条件就是递归到只有一个元素的 ...
- 调用数据库函数CallableStatement
- android studio 1.0 开发 ndk 调用 c++ so库
一个没用过java和安卓的人使用android studio开发带c++ so库的安卓程序用例(以ndk的hello-jni为例),对于不熟悉java和安卓的人来说这个很花时间,希望通过这篇文章帮助跟 ...
- 如何快速上手使用STM32库函数
一.背景 如前文所述,利用标准库函数的好处在于,可以快速开发,不用去对着数据手册,小心翼翼的一位一位的配置那些繁复的寄存器,因为这些工作意法半导体已经找了一些顶级的工程师帮你做了,杰作既是其库函数.当 ...
- 在visual studio 2010中调用ffmpeg
转自:http://blog.sina.com.cn/s/blog_4178f4bf01018wqh.html 最近几天一直在折腾ffmpeg,在网上也查了许多资料,费了不少劲,现在在这里和大家分享一 ...
随机推荐
- [EffectiveC++]item35:考虑virtual函数以外的其他选择
本质上是说了: Template Pattern & Strategy Pattern 详细见<C++设计模式 23种设计模式.pdf 55页> 宁可要组合 不要继承. ——— ...
- 使用nodejs代码在SAP C4C里创建Individual customer
需求:使用nodejs代码在SAP Cloud for Customer里创建Individual customer实例. 代码: var createAndBind = require('../je ...
- 使用matlab对图像进行傅里叶变换
原图: (0) 代码: I=imread('1.jpg'); I=rgb2gray(I); I=im2double(I); F=fft2(I); F=fftshift(F); F=abs(F); T= ...
- FRP-Functional Reactive Programming-函数响应式编程
响应式编程是一种面向数据流和变化传播的编程范式: 响应式编程和函数式编程的融合: 响应式编程为内核:函数式编程为工具: 流的概念先天适合函数式编程. Some quotes from the arti ...
- Gluon Data API
http://mxnet.apache.org/api/python/gluon/data.html import sys import os import time import mxnet as ...
- tp5.0和tp3.2中前台模板IF标签和FOREACH的区别
IF标签 tp3.2 <if condition="($name eq 1) OR ($name gt 100) "> value1 <elseif condit ...
- 2018 Multi-University Training Contest 4 Problem K. Expression in Memories 【模拟】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6342 Problem K. Expression in Memories Time Limit: 200 ...
- Python re模块正则表达式
- Segmentation fault(Core Dump)
Segmentation fault 这个提示还是比较常见的,这个提示就是段错误,这是翻译还是十分恰当的. Core Dump 有的时候给我们呈现的翻译很有趣是”吐核“,但是实际上比较贴切的翻译是核心 ...
- HP-UNIX平台修改Oracle processes参数报错:ORA-27154、ORA-27300、ORA-27301、ORA-27302
OS 版本 :HP-UX B.11.31Oracle版本:11.2.0.4 (RAC) (一)问题描述 最近发现无法连接上数据库,报错信息为“ORA-00020:maximum number ...