杂记

今天要验证一个问题:如何在拥有一个 C++ 对象的前提下,调用它的位于其他动态库中的导出成员函数,而且是用动态调用的方式。

这个问题是昨天提到的某个问题的延伸,今天有些想法,需要写几行代码看看效果。结果才发现,由于在手机平台上开发了好几年,加上我的 Windows 笔记本上采取的反盗版策略,竟然一直没有安装 Visual Studio。立马到微软的网站上去下载并安装了 Visual Studio 2010 Express。比想象的个头小了不少,能用 C++ 开发 Windows 各种应用,虽然不带 MFC 或者 ATL,但已经很适合我了。原也知道 Carbide.c++ 自带的 WINSCW 平台的编译器其实是支持构建 Windows 下的程序的,可惜环境并不能稍作配置就实现,只好作罢,今后可以当作兴趣研究一下。

VS 的 ISO 文件需要个虚拟光驱的软件,才发现 Daemon Tools 也没安装,到网上查找的时候发现了个个头不大但功能是 n 合一的软件,叫 Gizmo,里面有虚拟光驱的功能,还有快捷启动、文本(支持语法高亮)以及十六进制编辑器,还支持数据库连接操作,甚至自己还有一个脚本语言。下来体验了一下,各种功能有是没错,不过都不强大,可见还有很大的提升空间。整个软件的功能整合思路倒是挺有意思的,希望能继续下去。

最后说一下开头提到的那个问题,各种尝试都失败,最后还是用内嵌汇编直接把对象地址扔到 ECX 寄存器里,然后把函数原型转型为非成员函数的形式进行调用,解决掉了。只是不知道,Carbide.c++ 的 WINSCW 编译器,this 指针也是放到 ECX 里的吗?要是 x86 也像 ARM 那样基本都是用寄存器传递参数就好,调用起来真方便,把 this 加为第一个参数就什么都齐活了。

—— 记于百度空间

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注