我在32位ETL工具(普适数据集成商v9)中工作.我需要赋予这个工具调用外部函数的能力,它可以在不提取存档的情况下从ZIP存档中删除一个文件。
ETL工具提供了加载外部DLL并调用其函数的能力。DLL及其函数由ETL工具的自定义脚本语言引用,如下所示:
Declare function OemToCharA lib "user32" (byval lpszSrc as string, byval lpszDst as string) as long然后,函数(本例中的OemToCharA)在该声明之后的脚本行中的某个位置调用。我已经用一个注册的DLL测试过这个,它可以工作。
所以我想要用一个函数来构建一个DLL,这个函数可以执行压缩操作。
由于我不知道如何编程操作zip文件,所以我找到了DotNetZip --一个免费的.NET类库,它为zip归档操作提供了繁重的工作。对我来说,问题是它是.NET (管理的)。我还是想试着用它。因此,我构建了一个C# DLL (.NET 4.0),该函数利用DotNetZip进行所需的压缩文件操作。我传入两个参数,"zip文件位置“和”要删除的文件“,zip归档将被更新。
我读到了构建混合模式C++/CLI的想法,以利用本地的托管.NET代码。我找到了这 VS解决方案,它由3个基本项目组成:
我构建了一个基于这种模式的测试解决方案,它从zip存档中删除了一个文件,它工作得很好。不过,请注意,混合模式DLL是从本机C++控制台应用程序调用的,该应用程序是VS解决方案的一部分。我不需要注册任何DLL,它只是起作用了。
但是,最终我需要ETL工具来调用混合模式DLL。我不能让这件事起作用。
到目前为止,我在ETL服务器上尝试过的东西:
ETL工具具有调用外部应用程序的能力,所以我相信我可以让它调用类似于VS测试解决方案的控制台应用程序,但是我真的很想让它只使用DLL。这个是可能的吗?如果是的话,我遗漏了什么?
发布于 2016-11-16 18:58:25
感谢使用的提示。
在做了这两个更改之后,它开始工作了。再次感谢马特!
https://stackoverflow.com/questions/40619260
复制相似问题