将Visual Basic 6.0类型转换为VB.NET“结构”
编辑:已经让这个在32位下工作,我现在正试图让它适用于64位.我已经获得了DLL的源代码,并且DLL和应用程序都被编译为64位.我每次都会遇到访问冲突.这是DLL代码(C在
VisualStudio2005中):
#pragma pack( push,2 ) // Output Results Structure typedef struct tagTVA_RESULTS { int iID; /* Difference ID 1 .. n */ int iLeft; /* Bounding rectangle */ int iRight; int iTop; int iBottom; double dCx; /* Center of gravity */ double dCy; double dMajor; /* Shape information */ double dMinor; double dAngle; /* Rotational information */ int lArea; /* Number of pixels */ int iEdge; /* Set if difference is at the edge of the image */ double dNormalDensity; int iNormalCount; double dDifferenceDensity; } TVA_RESULTS,*PTVA_RESULTS; #pragma pack ( pop ) 注意它将包设置为2.我已经尝试在应用程序中将其设置为2,但它失败了.我尝试了其他值,我甚至尝试过不同的值.我已经尝试使用4作为整数大小,8作为双倍大小.但我认为(知识有限)如果两种包装尺寸相同,它应该有效. 此时我怀疑函数是如何调用的.它的第一个参数是指向这些结构数组的指针.应用程序传入数组ByRef的第一个元素,我认为它实现了这一点.但是指向数组的错误指针可以解释症状.这是DLL中的函数定义. int WINAPI MNtvaAnalyzeVB (TVA_RESULTS *pResults,int iMaxCount) 我的老板认为这可能是一个big/little endian问题,但如果它们都在同一环境中编译,那似乎不太可能. 我该怎么办?
当然,接下来我尝试解决了这个问题.定义这样的结构:
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential,Pack:=1)> _ Public Structure TVA_PARAMETERS Public iStandardFilterOnOff As Integer ... etc. 解决了这个问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |