你有VB6的push-the-envelope编程用法的例子吗?

时间:2009-10-01 06:34:56

标签: vb6

VB6因过于宽容(从而允许不良做法)和隐藏复杂性而闻名,这些复杂性可能是开发人员最好不需要知道的。但我发现,90%的应用程序可以在VB6中完成。

但我希望看到更多关于推动信封工作以绕过VB6的局限性的例子。例如,我曾经通过调用Windows操作系统找到了一些在VB6中使用指针的代码。结果是对大文件(大约2MB)的一些字符串操作从30分钟降低到超过3秒。有没有人有其他超越VB6限制的例子?

N.B。 VB.Net。

7 个答案:

答案 0 :(得分:6)

一个令人讨厌的伎俩是滥用CallWindowProc通过传递一个指针来调用任意代码。这在技术上打破了该函数的契约,因为它只应该与通过GetWindowLong获得的句柄(不是直接代码指针)一起使用;但实际上很少有人真正知道这个实现被强制允许任意代码指针。这允许你调用任何函数指针,只要它是stdcall,并且需要4个与WndProc参数大小相同的参数。

由于上述原因,一个更糟糕的技巧是你可以用这种方式动态生成代码 - 只需将其粘贴在一个字节数组中,然后使用CallWindowProc跳转到它。这样,您可以将非VB6生成的本机代码嵌入到VB6应用程序中,而无需任何外部DLL。当然,在这个默认启用NX位的时代,它可能不再是一个好主意(如果它曾经是,那就是)......

答案 1 :(得分:5)

Joel在2001年回复了关于VB6的some good stuff

  

许多VB6程序都是意大利面,   或者是因为他们做得很快   肮脏的一次性,或因为他们是   由黑客程序员编写而没有   面向对象的培训   编程,甚至是结构化的   编程。

     

我想知道的是,如果发生了什么   你是那些顶尖的C ++程序员   用指针做梦,让他们编码   在VB6中。我在Fog Creek发现的   是他们变得超级高效   编码机。代码看起来很漂亮   好,它面向对象且健壮,   但是你不要浪费时间使用工具   比你低的水平   需要。我花了数年时间编写代码   用于C ++ / MFC和多年编写代码   Visual Basic,让我告诉你,VB6   只是更多,更有成效......

     

Visual Basic 6的一个方面   是它并不总是给你   获得完整的曲目   你需要做的Windows好东西   抛光的应用程序。但它是什么   确实比其他任何一个都好   编程环境,让你   放入C ++代码(或调用C API)   当你绝望或何时需要   额外的速度。

这是2001年写的:当今创建一个新的Windows程序时,恕我直言,最佳生产力的明显选择是VB.Net或C#。 ( JOKE: C#是just Visual Basic with semicolons。)

回到VB6:有许多很好的例子,说明如何调用C API来做一些特殊的事情或者只是为了更快地运行。这是我最喜欢的一些链接:

答案 2 :(得分:4)

我不确定他在三明治中放了什么,但Matthew Curland's Advanced Visual Basic 6中的所有内容都是VB6的推送信封编程用法。真是棒极了。

答案 3 :(得分:3)

如果没有回答提及Bruce McKinney的Hardcore Visual Basic,现在(奇妙地)可以在网上找到这个问题,不能让这个问题继续下去:

http://vb.mvps.org/hcvb.asp

这是一位非常喜欢基本精神的作者的精彩读物。

答案 4 :(得分:2)

意识到大多数Gang of Four设计模式都依赖于实现接口,而不是继承,因此可以在Visual BASIC 6中轻松使用。

能够做到这一点大大改善了我的CAD / CAM应用程序的设计。

答案 5 :(得分:1)

答案 6 :(得分:0)

Paul Caton的Subclassing,继续由LaVolpe(http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=68737)允许您做任何您需要的事情,挂钩到Windows事件,没有IDE崩溃。 有了这个,您可以在Windows中实现任何必要的功能。 样本中有一些您可能从未想过的疯狂事物。