使用大漠DLL插件中的screentoclient()函数,使用Tlbimp转换,版本为3.5
转换后的原型为screentoclient(int hwnd,ref object x,ref object y)作用是将屏幕x,y的坐标值改变为某窗口客户区的坐标值
查询得知,该插件好像是c++开发的控件,这两个值使用的是变体变量,于是使用object进行封箱。
string x=null,y=null;
object x1=x;
object y1=y;
调用screentoclient报错说插件仅能识别VT_I2和VT_I4,网上查意思是VC++整型变体变量和长整型变体变量
于是改用
Int16 x=0,y=0;
object x1=x;
object y1=y;
和
Int64 x=0,y=0;
object x1=x;
object y1=y;
包括Int32也试了,全都是报错为数据类型不兼容,请问这里应该怎么进行封箱才能正确取得x,y坐标的值
我用的VS2008的C#。
转换后的原型为screentoclient(int hwnd,ref object x,ref object y)作用是将屏幕x,y的坐标值改变为某窗口客户区的坐标值
查询得知,该插件好像是c++开发的控件,这两个值使用的是变体变量,于是使用object进行封箱。
string x=null,y=null;
object x1=x;
object y1=y;
调用screentoclient报错说插件仅能识别VT_I2和VT_I4,网上查意思是VC++整型变体变量和长整型变体变量
于是改用
Int16 x=0,y=0;
object x1=x;
object y1=y;
和
Int64 x=0,y=0;
object x1=x;
object y1=y;
包括Int32也试了,全都是报错为数据类型不兼容,请问这里应该怎么进行封箱才能正确取得x,y坐标的值
我用的VS2008的C#。
object v1 = new VariantWrapper(x);
object v2 = new VariantWrapper(y);
dm.ScreenToClient((int)this.Handle, ref v1, ref v2);
x = (int)v1;
y = (int)v2;
C++的长这样
你看看怎么弄成C#的。。估计差不多
myx1 = (VARIANT*)CoTaskMemAlloc(sizeof(VARIANT));
myy1 = (VARIANT*)CoTaskMemAlloc(sizeof(VARIANT));
myx1->vt = VT_I2;
myy1->vt = VT_I2;
myx1->iVal = 510;
myy1->iVal = 338;
dme->ClientToScreen(myhwnd,myx1,myy1);
long x = myx1->iVal;