怎样向C++编写的DLL中传递参数? 有一个用C++开发的音频解码器,函数原型如下:void Decoder(DWORD ID, BYTE* inBuff,char* outBuff);在C#中应如何调用这个解码器呢?在C#的程序中给解码器输入的数据和输出的数据都是byte[]。谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://hi.baidu.com/timeflashing_coldleaf/blog/item/fa27348bc74e24bf0e244473.html 把DLL和程序放在同一目录下[DllImport("", EntryPoint = "Decoder")] char* string 传出的char* StringBuilder short short char byte DWORD Int32 or UInt32char[n] fixed byte[n] 结构指针 结构指针 函数指针 委托 结构体数组使用IntPtr 引用该dll后可以直接调用函数。 http://topic.csdn.net/u/20100811/10/a80c7b79-9c1f-47cf-b2e9-6bbea54a6113.html看看我以前问的帖子 如果是非托管的,就用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); 这里没有办法声明。 其余的 没什么了; 还有你可以参考这里:http://blog.csdn.net/jingshuaizh/archive/2009/02/04/3862019.aspx先前用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 outBuff是输出的 PCM 数据,希望是以 byte[] 形式出现。在写DllImport的时候应该怎么写呀?用string或StringBuilder不会影响数据吗?谢谢! 关于Mono for android 现在是不是要激活了? 动态增加sql的select条件 为什么提示插入语句错误呢? kuai 程序打包问题,急需解决送分送分了,谢谢大家~! 求教windows系统里格式化u盘为linux ext3.哪位高手愿意做赏金猎人? 高分救购解决问题方法。(大小侠请进,问题解决定加分) 关于DATAGRID删除行 大家好,能不能把你们的简历给我参考一下 谢谢 运筹学运输问题 文件的编码读取问题, 想不明白了 为什么两个SelectIndexChanged事件效果不同
[DllImport("", EntryPoint = "Decoder")] char* string
传出的char* StringBuilder
short short
char byte
DWORD Int32 or UInt32
char[n] fixed byte[n]
结构指针 结构指针
函数指针 委托
结构体数组使用IntPtr
看看我以前问的帖子
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);
这里没有办法声明。 其余的 没什么了; 还有你可以参考这里:http://blog.csdn.net/jingshuaizh/archive/2009/02/04/3862019.aspx先前用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