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。
哪位给指点一下,等待中...
如果实在不行,我提供一个思路:既然你说前面两个参数都能接收正常,你第三个参数只是一个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就随便你自己了。反正到时候传过来你要分解第一个参数。然后再判断。
我这方法是没得办法的办法,你可以试一下。
public extern static int some(string id, long type, int flag);
“都是接收 0 ” 是什么意思,是指你传 1,3,4 等值,在 some 内部,它得到的 flag 值始终为 0 吗?还是你根本不知道内部得到什么值,只是通过 some 的执行结果来推断的?
高人啊,确实是我不知对方dll中获得什么,只是通过结果来看的。
让别人公司重新写了个函数,不传第三个参数了,哎,邪门