在开发中遇见一个问题
要把一个vc写的库封装为ocx供c#调用
其中要在ocx里面传递一个结构体的指针
我该如何传啊 例如:struct image{int code,Cstring name,char * type }
有一个方法:long getNum(image * myImage){...}我该如何把这个方法转换为ocx中的公开接口 
请告诉指点
 

解决方案 »

  1.   

    不要用CString,char*,用TCHAR [];然后将数据打包进SAFEARRAY,通过VARIANT传递。
      

  2.   

    不好意思,发错了,可参考http://blog.sina.com.cn/s/blog_705c60cc0100muzi.html
      

  3.   


    我本来就是采用你给出资料的第一种方法,但是传进去结构体的指针时,就报错了,是值超出了范围,原因我估计是结构体无法转换为一个variant
               ImageStruct myImage;//是一个结构体
               myImage.ImageType = System.Text.Encoding.Default.GetBytes("01");
                myImage.Data = System.Text.Encoding.Default.GetBytes("00");
                myImage.RetLen = 1;
                
                object ob=(object)myImage;
                object obj = new System.Runtime.InteropServices.VariantWrapper(ob);  
                IntPtr myImagePtr = System.Runtime.InteropServices.Marshal.AllocHGlobal(System.Runtime.InteropServices.Marshal.SizeOf(myImage));
                retCode=this.axTDBA_ActiveX1.ExecuteSQL("00","00","00",sql,0,ref obj,300);//这个是从ocx转换过来的接口至于第二重方法,我没有采用,因为我的程序可能涉及到同时操作同一个对象的问题
      

  4.   

    不要用CString,char*,用TCHAR [];然后将数据打包进SAFEARRAY,通过VARIANT传递。(吹雪说的对
    !)
    这个好像是www.codeproject.com 有demo
      

  5.   

    跨语言就是麻烦,结构体里面成员不多的话,就每一个成员添加一个参数吧:
    long getNum(int code,Cstring name,char * type);中间的CString可能要用BSTR*
      

  6.   

    不要用CString,char*,用TCHAR [];然后将数据打包进SAFEARRAY,通过VARIANT传递。