接口函数,dll文件调用问题。谢谢
我自己有vc编写的dll,
h文件中的说明是:
extern "C" __stdcall void Add(double a,double b,double *c);
extern "C" void __stdcall RPJLinePosition(BYTE* bpSrc, long Width, long Height,
double *ty, double *by, TS_RECT *tsRect);
输入图像数据*bpSrc,width,height是图像的高和宽,
ty,by是需要返回的2个数据,TS_RECT使自己定义的一个结构
typedef struct {
long Left, Top;
long Right, Bottom;
}TS_RECT;
我在vb.net中如下定义
<StructLayout(LayoutKind.Sequential)> Public Structure TS_RECT
Dim Left As Long
Dim Top As Long
Dim Right As Long
Dim Bottom As Long
End Structure
Declare Auto Function RPJLinePosition Lib "RPJTextureLine.dll" (ByVal btSrc As Long, _
ByVal nWidth As Long, ByVal nHeight As Long, ByRef ty As Double, _
ByRef by As Double, ByRef tsRect As TS_RECT)
Declare Sub Add Lib "RPJTextureLine.dll" (ByVal a As Long, ByVal b As Long, ByRef c As Long)
End Class
问题1。为什么我不能够直接定义long型,会产生“未将对象的引用设置到对象的实例上”
我的程序源代码是:
Dim lpSrc As Long
Dim nWidth As Long
Dim nHeight As Long
Dim ty As Double
Dim by As Double
Dim Radius As Double
lpSrc = AxMImage1.HostAddress
nWidth = AxMImage1.SizeX
nHeight = AxMImage1.SizeY
Dim tsRect As TS_RECT
tsRect.Bottom = nWidth - 1
tsRect.Left = 0
tsRect.Right = nWidth - 1
tsRect.Top = 0
ty = Nothing
by = Nothing
TLVC.RPJLinePosition(lpSrc, nWidth, nHeight, ty, by, tsRect
问题二:我全部都定义成inter型时,ty,by只能够返回一个ty,by的地址是0000000
谢谢帮忙
问题点数:100、回复次数:7Top
1 楼Jockey()回复于 2005-08-02 19:42:09 得分 0
RPJTextureLine.dll 注册了没有?Top
2 楼sx_lxh(路漫漫)回复于 2005-08-02 22:19:31 得分 0
long试着全换成integerTop
3 楼Yiqun_Zhao(蓝帆·雨轩 MS MVP)回复于 2005-08-03 07:53:09 得分 0
注册您自己的.dll文件、把Long改成Single看看。Top
4 楼cyczl666(蔡蔡)回复于 2005-08-03 07:56:33 得分 0
http://blog.csdn.net/cyczl666/archive/2005/07/10/419280.aspxTop
5 楼xuehuavbnet(雪花)回复于 2005-08-03 08:35:56 得分 0
注册?怎么注册哦?我不知道了,
如果全部改成integer型数据的话可以进行运算,但是第二个ByRef的值返回不了。
跟踪到原来程序代码中第一个 ty,计算出来的值是233.890...可是返回的时候变成了一个80000的天文数字了。是不是要进行什么转换?
ByRef ty As Double, _
ByRef by As Double,Top
6 楼painchen(学习中)回复于 2005-08-03 09:47:04 得分 0
regsvr32 试试Top
7 楼ssss1101(小氏)回复于 2005-10-24 18:59:10 得分 0
首先要把 函数申明中的引用类型(ByRef tsRect As TS_RECT)改成intptr 或byte()数组,然后把所有的long类型都改成int .Top




