首页 新闻 赞助 找找看

c#调用c++ dll的一个问题

0
[已解决问题] 解决于 2012-07-18 15:01

c++的函数如下:

///////////////////////////////////////////////////////////////////////////
模块名称:some.dll
调用方法
///////////////////////////////////////////////////////////////////////////
BOOL __stdcall some(LPCTSTR lpAccessionNumber, LONG nFormat, BOOL bKey)

lpAccessionNumber:检查号
nFormat:图像格式,1-BMP;10-JPG
bKey:是否仅输出关键影像,1-仅关键影像;0-全部影像

///////////////////////////////////////////////////////////////////////////

 

我写调用如下

///////////////////////////////////////////////////////////////////////////

[DllImport("some.dll")]
public extern static bool some(string id, long type, bool flag);

///////////////////////////////////////////////////////////////////////////

 

 

现在的问题是,前两个参数接收没有问题,第三个参数总是接收0,不管我是传true,还是直接把第三个参数改为int,传1,它都是接收0。

哪位给指点一下,等待中...

gzl的主页 gzl | 初学一级 | 园豆:5
提问于:2012-07-14 10:56
< >
分享
最佳答案
0

如果实在不行,我提供一个思路:既然你说前面两个参数都能接收正常,你第三个参数只是一个bool型,只有两种结果是吧,即True或False ,你可以只传两个参数,可以在传第一个参数后面给它加个标识来判断是True或False。  如: 本来传的是这三个参数 (string 0001,long 12,bool True)。你可以写成

(string 00010,long 12),即如果第三个参数为True,那么就在第一个参数末尾加个0,再把这两个参数传过去,最后在C#这边把第一次参数分解一下。如果第三个参数为False,那么就在第一个参数末尾加1如:

(string 00011,long 12),这个加0加1就随便你自己了。反正到时候传过来你要分解第一个参数。然后再判断。

我这方法是没得办法的办法,你可以试一下。

奖励园豆:5
icyme | 初学一级 |园豆:77 | 2012-07-15 20:26
其他回答(2)
0

public extern static int some(string id, long type, int flag);

“都是接收 0  ” 是什么意思,是指你传 1,3,4 等值,在 some 内部,它得到的 flag 值始终为 0 吗?还是你根本不知道内部得到什么值,只是通过 some 的执行结果来推断的?

Launcher | 园豆:45045 (高人七级) | 2012-07-14 11:34

高人啊,确实是我不知对方dll中获得什么,只是通过结果来看的。

支持(0) 反对(0) gzl | 园豆:5 (初学一级) | 2012-07-14 13:23
0

让别人公司重新写了个函数,不传第三个参数了,哎,邪门

gzl | 园豆:5 (初学一级) | 2012-07-15 22:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册