调试时好好的,编译成本机代码就不可以运行了,只能编译成P代码才能运行,请问还有什么方法可以编译成本机代码也能运行的呢?

解决方案 »

  1.   

    以下是我摸到的经验:一,线程体内不能调用任何VB内部函数,如StrConv,Mid,Left等,取而代之,全用API实现;二,线程体内不能调用任何由Declare语句声明的API函数,取而代之,使用类型库(TLB)来引入API;三,线程体内最好也不要调用任何COM对象.....如Text2.Text=hThread之类的,取而代之,使用相应控件的API操作方式来操作它,比如,要设置某文本框的内容,就使用SendMessage发送一条WM_SETTEXT消息过去.....这样的话,编译为本机代码,就有机率能正常运行.....因为之前我做过这样的尝试,想在VB6里面实现多线程,结果真的是晕倒了.....我做的努力,你也看到了.....一大把API....全用类型库....真的好累而且这样的程序编写出来后,有时还是会莫名其妙地非操.....但有时候,什么也没改,编译出来后又能正常执行.....看来我还得再学学基本原理....以及VB的EXE执行的原理....睡觉....
      

  2.   

    如果全用API的话那就没什么意思了,很多东西都实现不了。
    还有个问题,编译成P代码后运行完毕想关闭时怎么又会出现错误提示框了?
      

  3.   

    我从豆子的一篇文章里看到,说是VB在调用一个API后,会自动将错误返回值写入到调用对象,而这一操作使用到了线程本地存储....于是VB就挂了...他的解决办法是,使用API HOOK禁止VB的这种自动操作....
      

  4.   

    务必先读懂《高级 Visual Basic 编程》,CSDN 的资源下载区有。