我跟随Rudy Velthuis关于在DLL中使用C类的优秀 article.一切都很好,除了我需要访问一些在C DLL中没有相应工厂的类.如何在DLL中构造类的实例?有问题的类定义为 class __declspec(dllexport) example
class __declspec(dllexport) exampleClass { public: void foo(); };
现在没有工厂,我没有明确的方法来实例化类,但我知道它可以完成,因为我已经看到了使这些类可用于Python的SWIG脚本(.i文件).如果Python和SWIG可以做到这一点,那么我假设/希望有一些方法可以在Delphi中实现它.
现在我对SWIG知之甚少,但它似乎为C错位名称生成某种地图?那附近哪儿好吗?看看DLL的导出,我想我可以访问函数&构造函数/析构函数由索引或直接损坏的名称,但这将是令人讨厌的;它会工作吗?即使我可以调用构造函数,我该怎么做相当于“new CClass();”在德尔福?
正确的方法是编写一个包装器DLL,为您需要的类公开工厂.我不确定SWIG的工作原理,但任何依赖逆向工程改名的东西似乎都是一种可疑的方法.
除了C对象应该只在C代码中创建.您应该将对象创建语义留给C运行时.
COM存在的原因.正是为了使这个跨语言对象隐喻整齐地工作.
我写了几十个从Delphi,python和C#调用的COM对象