本帖最后由 Net85 于 2010-07-14 08:42:11 编辑

解决方案 »

  1.   

    这个基本上,很难..
    这一块已经由其他人在做,还是不要传递特殊的结构体了。
    传递字符串吧,传递xml格式的字符串。
    传递过来后解析出来。
      

  2.   

    不知道我有没有把你的意思理解错是把结构体做成xml格式的,之后转化为字符串,然后再传给
    DLL_API int __stdcall User_AddText(int CardNum,User_Text *pText,int iProgramIndex);
    这个方法吗?
    那这样是不是需要修改dll了?dll文件是别的公司给的,我没法修改。
      

  3.   

    我的意思就是修改dll传递字符串。
    至于传递结构体,我感觉中间肯定有许多麻烦。
    我做过这方面的东西,并且现在正在做,
    只是C#访问C++ Dll这项工作不是由我来完成的。
    不好意思,没有办法给你更好的答案。
      

  4.   

    http://download.csdn.net/source/2439376
    这个资源你看看吧。
      

  5.   

    如果不能调试C++的库,这种问题解决起来比较麻烦。能找第三方要调试的pdb吗?
      

  6.   


    也没有第三方的pdb的。 看来就是要麻烦了
      

  7.   

    现在这个同样的代码,又出现“尝试或读取受保护的内存,这通常指示其他内存已损坏”关了 vs环境会出现
    说*****内存读取某某内存,这个应该是因为程序内部调用指针时,指针所指示的地址错误,那这样推断,应该是c++指针转化错误了。
    我查了很多资料也改不过来,试了很多方法都不行。期待给点建议!!!!
      

  8.   

    我现在正在做跟你一样的事,也是用EQ2008.dll我现在情况是这样:在FORM窗体下调用所有DLL函数都是可以的但在WEB页面下调用DLL函数却一点反映也没有,不过是可以开、关屏的
      

  9.   

    感觉会不会是 EQ2008_DLL.dll 路径的问题
      

  10.   


    因为发了贴也没人回,这几天就没有上来看。路径没有问题,如果是路径问题的话应该就不会打开显示屏的,也就没法执行后面的。现在我的内存问题解决了,就是添加多行文本时,有时候不显示。你的调用dll函数一点反映都没有,是什么意思啊?显示屏黑屏吗?添加文本返回的是多少?
      

  11.   

    曾经做的c#form也是一点问题都没有,可以调用,现在web不能,应该是两个协议不同,造成的。
      

  12.   


    调用DLL函数时,原有的文字像是被覆盖了空字符,屏幕全黑,要重新用FORM方式打上字才显示
      

  13.   

    我发这个贴时,也是返回-1,屏也是没反应。后来是:
    换了动态库
    给文本区参数“文本”chContent赋值的方式改了改然后就可以不知道你的会不会是这个原因
      

  14.   

    我的赋值方式改为这样子了:
     StringBuilder chcontent = new StringBuilder(dr["page_content"].ToString(), 200);
                        chcontent.Append((char)0);
                        chcontent.Append('*', chcontent.Capacity - 8);
                        mySingleText.chContent = chcontent.ToString();
    动态库你还需要的话,我给你发一份。
      

  15.   

    控制卡:EQ2010-I=4[地址:0]
    CardType=4
    CardAddress=0
    CommunicationMode=1
    ScreemHeight=32
    ScreemWidth=64
    SerialBaud=115200
    SerialNum=1
    NetPort=5005
    IpAddress0=172
    IpAddress1=16
    IpAddress2=1
    IpAddress3=236这个都没错 我在FORM下都是这样可以控制
      

  16.   

    Net85你有QQ吗直接联系会比较方便一点我的项目急着要用
      

  17.   

    EQ提供的动态库中有新旧两个版本   用EQ旧版提供的实例串口和网络方式都可以。但应用在自己写的WEB程序时,网络方式会黑屏   用EQ新版提供的实例串口通讯正常,但网络方式不成功(EQ提供的实例)不知道你那里调试时会不会出现这样的情况
      

  18.   

    根据msdn上所说,string不能直接赋值给结构我就用了如何方式赋值:
         User_Text myText = new User_Text();
         StringBuilder chcontent2 = new StringBuilder(dr["page_content"].ToString(), 500);
                                chcontent2.Append((char)0);
                                chcontent2.Append('*', chcontent2.Capacity - 8);
                                myText.pchContent = chcontent2.ToString();
    可是,刚开始一天,运行正常,后来就又出现“尝试或读取受保护的内存,这通常指示其他内存已损坏”这个错误,是不是赋值时,我的stringbulider定义内存容量不对(字符串变量是不定长的),大家再帮忙看看。
      

  19.   

    楼主参考下,这个:C++与.net数据类型对应表 
    http://www.cnblogs.com/dengsu888666/archive/2006/04/03/365584.html
      

  20.   


    谢谢,我感觉我的类型转换是正确的
    根据msdn上所说,string不能直接赋值给结构我就用了如何方式赋值:
      User_Text myText = new User_Text();
      StringBuilder chcontent2 = new StringBuilder(dr["page_content"].ToString(), 500);
      chcontent2.Append((char)0);
      chcontent2.Append('*', chcontent2.Capacity - 8);
      myText.pchContent = chcontent2.ToString();
    但还是出现内存错误,给点意见吧
      

  21.   

    http://topic.csdn.net/u/20100605/15/fc41bdf7-c3bf-435c-b5f0-25af5a442c26.html
    来我这里看看
      

  22.   

    根据你的解决方法,我的string 前面都加了 [MarshalAs(UnmanagedType.LPStr,SizeConst=500)] 
    但还是会出现错误我后面调用赋值时是这样的
    User_Text myText = new User_Text();
      StringBuilder chcontent2 = new StringBuilder(dr["page_content"].ToString(), 200);
      chcontent2.Append((char)0);
      chcontent2.Append('*', chcontent2.Capacity - 8);
      myText.pchContent = chcontent2.ToString(); 而且调用了DLL之后,chcontent2 也清空了。不知为什么?
     
      

  23.   

    [MarshalAs(UnmanagedType.LPStr,SizeConst=500)]  
    sezeConst的大小不能随便设置吧,dll难道没提供结构体变量的大小吗?