社区
C#
帖子详情
C# 中extern "C" _declspec(dllexport)不能用?
mishixiaosenlin
2011-03-22 03:23:13
最近开发一款手持设备,遇到了一点问题,厂家给了一个dll 然后又给了几段代码(不知道是不是C#的,他们工程师有点“白”一问三不知),其中有代码写到“extern"C" __decksoec(dllimport) int __stdcall Sum(int a);” 这个在我的程序里报错啊~~根本不能运行,我用的VS2008 在winform下开发的~各位大虾,救命啊~~
...全文
286
4
打赏
收藏
C# 中extern "C" _declspec(dllexport)不能用?
最近开发一款手持设备,遇到了一点问题,厂家给了一个dll 然后又给了几段代码(不知道是不是C#的,他们工程师有点“白”一问三不知),其中有代码写到“extern"C" __decksoec(dllimport) int __stdcall Sum(int a);” 这个在我的程序里报错啊~~根本不能运行,我用的VS2008 在winform下开发的~各位大虾,救命啊~~
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Just4life
2011-03-22
打赏
举报
回复
[Quote=引用 1 楼 qygcom 的回复:]
不像,C#通常这样 [DllImport("SHP_A3.dll")]
public static extern int SsmStartCti(string lpSsmCfgFileName, string lpIndexCfgFileName);
[/Quote]
+1
zhouxingyu896
2011-03-22
打赏
举报
回复
“extern"C" __decksoec(dllimport) int __stdcall Sum(int a);”
这是c++ 写的呢
提供给C#或者是其它语言调的
在 C#可以如下写法呢
[DllImport("生成Dll名称")]
public static extern 返回类型 函数名称(类型 参数,类型 参数);
bdmh
2011-03-22
打赏
举报
回复
c++的
qygcom
2011-03-22
打赏
举报
回复
不像,C#通常这样 [DllImport("SHP_A3.dll")]
public static extern int SsmStartCti(string lpSsmCfgFileName, string lpIndexCfgFileName);
C#
调用C++写的dll的实现方法
dll的编写,首先是打开VS新建一个C++的控制台程序,下一步后选择dll以及空文档即可。然后就是添加一个类添加一个方法。方法排头固定格式
extern
”C”__d
ecl
spec
(
dllexport
) 后面加方法即可。 例如如下代码: C++dll代码: 代码如下:
extern
”C”__d
ecl
spec
(
dllexport
) char* ShowImages(BYTE img[],int w,int h){;}
C#
调用dll基本也是固定格式,如下样式,这边有添加unsafe这是因为有用到指针的缘故[没用指针不需要unsafe],
C#
用指针必须添加 unsafe,并且在项目属性里面的生成允许
C#
调用C++dll方法步骤
C#
调用C++dll的方法和步骤 其他分享涉及到的概念和方法对于像我这样比较菜的选手看起来比较费劲并且很难抓住重点,这里我总结了一段时间的研究成果供初学者救济之用,简单明了。 1、新建项目->Visual C++->Win32项目 MyDLL 注意:C++编写的dll一般是
不能
直接拿来
C#
调用,需要先新建个C++的工程把dll里的方法重新封装成可被
C#
外部调用的函数。 2、MyDLL.cpp里的代码如下:
extern
C _d
ecl
spec
(
dllexport
)int add(int a ,int b) { int sum=a+b; return sum; } 注意:函数前一
DynamicLoad.rar
C#
动态调用C++类库,使用IL方式动态映射C++的导出方法,不使用DLLimport方式调用的类,导出方法DEMO
extern
"C" __d
ecl
spec
(
dllexport
) int Fix();
hf_ctp_c_proxy:最新版本已合并到 hf_ctp_py_proxy
最新版本合并到 hf_ctp_py_proxy 项目
中
, hf_ctp_c_proxy 上期技术CTP封装,可用
C#
,PY等语言调用.采用最新CTP版本,支持期权交易.支持win和linux 64位系统. ##C++封装的目的是什么? 通过封装,将原DLL
中
无法访问到的函数暴露出来供上层应用调用. ##封装
中
的要点 __d
ecl
spec
(
dllexport
) 表明函数为导出函数 * `
extern
"C"` 导出的函数名与声明一致,否则导出函数名无法正常使用 当然,也可以通过定义`.def`文件实现函数名正常 * `_stdcall` 32位
不能
使用此声明 linux
不能
使用此声明 * WIN32 & _WINDOWS * WIN32 编译32位C+时使用 * _WINDOWS 编译64位时使用 完整的.h宏定义 64位 #ifdef _WINDOWS //64位系统
C#
与C++与互操作实例讲解
一、
C#
调用C++库 1、创建C++库 打开VisualStudio,创建一个C++工程,输入项目名称HelloWorldLib 确定,然后下一步。选择应用程序类型为DLL 单击完成,我们就创建好了一个C++库的项目。 这里为了方便,我们直接在HelloWorldLib.cpp里定义函数 C++库导出有两种方式 一、以C语言接口的方式导出 这种方法就是在函数前面加上
extern
“C” __d
ecl
spec
(
dllexport
) 加上
extern
“C”后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。 #include stdafx.h #include<iostre
C#
110,537
社区成员
642,576
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章