| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 831 人关注过本帖
标题:C#调用vc++的dll出现问题,请大家帮忙谢谢!
只看楼主 加入收藏
wlj3304
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-8-24
收藏
 问题点数:0 回复次数:1 
C#调用vc++的dll出现问题,请大家帮忙谢谢!
vc++中dll的函数声明是:
#define DLL_PORT_TYPE __declspec(dllexport)
#define DLL_PORT_FUNCTION_TYPE __stdcall
DLL_PORT_TYPE BOOL DLL_PORT_FUNCTION_TYPE DLL_Search_Peaks(WORD wPeakSearchMode,WORD wPixelCount,double* pdblWL,double* pdblPwr,double dblNoiseThreshold,double* pdblNoiseThresholdProfile,DWORD* pdwPeakInfo);

在c#中我声明为:
[DllImport("Sense2020Dll.dll",CharSet = CharSet.Ansi)]
public static extern bool DLL_Search_Peaks(ushort wPeakSearchMode, ushort wPixelCount, ref double[] pdblWL, ref double pdblPwr,double dblNoiseThreshold, ref double[] pdblNoiseThresholdProfile, ref uint[] pdwPeakInfo);
调用:
double[] pdblNoiseThresholdProfile = new double[512];
uint[] pdwPeakInfo= new uint[512];
double[] pdblWL=new double[512];
double[] pdblPwr = new double[512];

   
  if (DLL_Search_Peaks(0, 512, pdblWL,pdblPwr, 2000,pdblNoiseThresholdProfile,ref pdwPeakInfo) == true)
{
  ......
}
(1)如向c#声明double*为ref double[],DWORD*声明为ref uint[],编译没有错误,调试状态下在if处设断点,则会出现未处理的“System.ArgumentException”类型的异常,其他信息: 方法的类型签名与 Interop 不兼容。
(2)如声明double*为double[],DWORD*声明为uint[],编译及运行都不会出现错误,在运行完if后一句设断点,只得到pdwPeakInfo[0]的值,其他值均为0。


哪位高手知道是怎么回事,能不能帮忙解决一下谢谢了
搜索更多相关主题的帖子: dll 
2010-08-24 16:39
athenalux
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河北石家庄
等 级:小飞侠
威 望:8
帖 子:975
专家分:2514
注 册:2008-11-26
收藏
得分:0 
像这句中,double[] pdblWL=new double[512];
pdblwl就是地址类型了,调用时我认为不应加ref了,如果结果不对,可能是其它的原因。

QQ:81704464
2010-08-25 14:43
快速回复:C#调用vc++的dll出现问题,请大家帮忙谢谢!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033586 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved