OCX接口指针传递数据问题
第三方OCX,VC调用测试一切正常,
C#中添加到工具箱,经过自动包装生成了两个dll(AxInterop.XXXTlb.dll, Interop.XXXTlb.dll),然后拖到窗体上,使用发现指针参数传递数据有问题
具体来说,就是C++中的数据块指针到了C#里经过wrapper之后,变成了单个变量的ref或者out修饰,只能得到单个正确数据,无法得到一整块正确的数据
void FunXXX(double * pdParam, long lCount); // .h, C++,
void FunXXX(out double Param, long lCount); // 元数据, C#,
因为C++中接口参数指针 *ptr 指向的实际内容并不明确, 既可以指向一个变量,也可以指向一个数组。C#自动导入ocx匹配参数时可能产生了二义性:是当作单个变量ref / out, 还是当作 ref / out 数组 ?
显然在这里将 *ptr 自动转换为单个变量的引用参数了. 问题是这种方式仅仅是封送了一个变量 ,而非一个数组,我们既无法修改自动wrapper生成的参数,也无法修改OCX提供的接口
手动使用Aximp.exe XXX.ocx /source 除了生成XXXTlb.dll, AxXXXTlb.dll外,还生成了一个AxXXXTlb.cs,里面的内容类似于对象浏览器和元数据的内容
请问这个 /source 生成的 AxXXXTlb.cs 可以手动修改吗? 我想把ref/out参数改成IntPtr,通过Marshal来传送数据块,或者直接改成unsave指针
有没有人这么干过?或者有其他解决办法?