首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过混合模式C++/CLI使用来自ETL工具的托管C# DLL -可能吗?

通过混合模式C++/CLI使用来自ETL工具的托管C# DLL -可能吗?
EN

Stack Overflow用户
提问于 2016-11-15 20:38:30
回答 1查看 170关注 0票数 0

我在32位ETL工具(普适数据集成商v9)中工作.我需要赋予这个工具调用外部函数的能力,它可以在不提取存档的情况下从ZIP存档中删除一个文件。

ETL工具提供了加载外部DLL并调用其函数的能力。DLL及其函数由ETL工具的自定义脚本语言引用,如下所示:

代码语言:javascript
复制
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个基本项目组成:

  1. 托管(C#) DLL项目
  2. 混合模式的C++ DLL包装器项目,它引用C# DLL。
  3. 本机(非托管) C++控制台测试应用程序项目,它引用C++包装器

我构建了一个基于这种模式的测试解决方案,它从zip存档中删除了一个文件,它工作得很好。不过,请注意,混合模式DLL是从本机C++控制台应用程序调用的,该应用程序是VS解决方案的一部分。我不需要注册任何DLL,它只是起作用了。

但是,最终我需要ETL工具来调用混合模式DLL。我不能让这件事起作用。

到目前为止,我在ETL服务器上尝试过的东西:

  • 我试图注册混合模式包装器DLL,但SysWow64\regsvr32 32未能在DLL中找到入口点。
  • 我在ETL服务器上安装了VS 2015 VC++ x86和x64可再发行库。
  • 我将解决方案(即混合模式、c#和dotnetzip dlls)中的DLL放置在engine文件夹中,因为控制台应用程序在DLL处于其部署文件夹时工作。

ETL工具具有调用外部应用程序的能力,所以我相信我可以让它调用类似于VS测试解决方案的控制台应用程序,但是我真的很想让它只使用DLL。这个是可能的吗?如果是的话,我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-16 18:58:25

感谢使用的提示。

  • ETL工具没有找到DLL,但是Process告诉我它正在检查的文件夹.我将DLL移到一个选中的文件夹中
  • 我的包装函数最初是空的,带有返回值的输出参数--这会导致问题,因为我在ETL文档中没有一个关于如何调用void函数的好例子。我将函数更改为返回一个"long“,并删除了输出参数。

在做了这两个更改之后,它开始工作了。再次感谢马特!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40619260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档