将非 .NET DLL 添加到 ColdFusion

3

我目前遇到了一个问题:如何将DLL文件添加到ColdFusion项目中。我做了大量的研究,但似乎没有找到足够简单易懂的解释。在Winform中,只需在引用中使用相同的DLL文件即可轻松实现,但是如果要将相同的DLL文件添加到ColdFusion项目中,则似乎无法正常工作。我尝试过以下方法:

<cfobject type="com" name="myObj" assembly="C:\DocViewer\AxInterop.SHDocVw.dll">

以下是我收到的错误信息:

CFOBJECT标签的属性验证错误。它具有无效的属性组合:assembly、name、type。

这个网站在过去对我非常有帮助,我希望能够了解CF9中这个DLL的工作原理,这样当当前程序完美运行时,我就不必完全重写整个程序。

来自评论:

我尝试使用regsvr32添加DLL,但现在出现了错误:

the module was loaded but the entry-point dllregisterserver was not found

2
我认为你应该能够在ColdFusion中使用已注册的COM对象。你从那段代码中得到了什么错误信息?查看COM对象的文档后,似乎你缺少必需的属性(类)并且对于COM对象有一个不支持的属性(程序集)。请检查我提供的参考资料。 - Miguel-F
1
另外,你使用的是32位还是64位CF?(在64位下不支持COM。)另外,这个dll具体是做什么的? - Leigh
2
@clerktech - 另外,您仍未告诉我们那些DLL对您有何作用。您提到这些是存储在SQL服务器上的PDF文档。我已经有了让其工作的硬编码,但需要DLL才能完成循环,但我仍然不知道这意味着什么。正如我之前所说,ColdFusion内置了许多PDF功能的支持。所以,您究竟是要对这些PDF做什么? - Miguel-F
我的博客是coldfusionmuse点com。我的电子邮件是mkruger在cfwebtools点com。随时直接联系我。 - Mark A Kruger
显示剩余18条评论
1个回答

0

看起来你正在使用 cfobject 属性来操作 .NET 对象,而不是 COM 对象。cfobject 标签是一种那些属性根据操作/类型而异的标签,就像 cfcontent、cffile 和 cfdirectory(以及一堆其他我无法马上想起来的标签)。

所以,你需要访问 COM 对象特定的文档,对于 Adobe 的最新版本 CFML 引擎,它位于这里:https://wikidocs.adobe.com/wiki/display/coldfusionen/cfobject%3A+COM+object

文档页面有个拼写错误,但看起来这应该对你管用(虽然我承认我很久没有调用过 COM 对象了):

<cfobject 
    type = "com"
    class = "path.to.com.Class" 
    name = "myObj"
    action = "create|connect">

看起来如果你已经将它安装为Windows服务,那么你会使用action="connect",或者创建一个CF实例化DLL,但我猜想将其安装为服务会更容易。我只是猜测,但如果你是这样使用它的话,“path.to.com.Class”应该是服务的名称,或者它将是逻辑路径到.dll文件,如果CF服务器正在实例化它的话。如果这两个选项都不起作用,那么如果将其移动到较新的操作系统上,则可能存在版本不兼容性,或者服务可能被错误配置。

从注册DLL的错误消息听起来(我猜测,因为我从未创建过Windows服务DLL),它正在查找DLL中的特定类或函数,以便在Windows中将其注册为服务,并且它无法在DLL中找到该“入口点”(即Java将查找“public static void Main(String args)”作为Java程序的入口点的方式)。这对于服务可能是必要的,但对于可能以其他方式访问和使用的通用DLL可能并不必要,因此这个DLL可能可以工作,但不兼容服务注册。

所以回到你的示例代码,这可能会起作用:

<cfobject type="com" name="myObj" action="create" 
    class="C:\DocViewer\AxInterop.SHDocVw.dll">

1
在COM上下文中,“class”应该是“ProgID”,而不是dll的路径。 - Henry
我说过我只是猜测。现在我注意到文档已经在评论中被提及。我没有阅读它们,因为我期望答案应该发布在回答中,而不是评论中。 - Samuel Dealey
1
我没有读它们,因为...那么你需要(a)调整你的期望,和(b)开始阅读评论,因为它们经常包含/请求澄清问题的信息,这对于即将回答问题的任何人都是相关的。 - Peter Boughton
"调整你的期望值" 我的期望应该与网站创建者的期望不同,即答案应按照他们预期的方式在答案中呈现,而不是在评论中。我应该期望程序员不会阅读技术网站上的说明并误用工具吗? - Samuel Dealey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接