如何从Inno Setup脚本调用.NET DLL?

我想从Inno Setup脚本中调用.NET DLL(用C#编码)的函数。

我有:

  • 在项目属性中标记了“注册COM互操作”选项,
  • 更改AssemblyInfo.cs文件中的ComVisible设置,
  • 将这些行添加到ISS脚本中:
  • [文件]

    源:c: temp 1 MyDLL.dll; 标志:dontcopy

    [码]

    函数MyFunction():string;

    外部'MyFunction @文件:MyDLL.dll stdcall setuponly';

    但我仍然收到以下错误:

    运行时错误(在-1:0):

    无法导入dll:C: DOCUME〜1 foo LOCALS〜1 Temp is-LRL3E.tmp MyDLL.dll。

    我究竟做错了什么?


    哎呀,我的糟糕,自从我读了pascal以来已经太久了! 所以,如果你需要获得价值,那么有几种可能性:

  • 用C / C ++编写功能并导出该功能,这绝对是受支持的。
  • 使用Managed C ++ dll来填充您的.NET dll,并将该调用暴露为C接口点(这应该起作用,但它变得很麻烦)
  • 使用.exe将代码的结果存储在.INI文件或注册表中或临时文件中,然后在设置代码部分中读取结果(现在该操作非常糟糕)
  • 当我上次使用InnoSetup时,它不直接支持你的场景(从设置调用.NET代码)。


    Intenta de esta manera(试试这种方式):

    Var
     obj: Variant
     va: MyVariableType;
    Begin
     //Starting
     ExtractTemporaryFile('MyDll.dll');
     RegisterServer(False, ExpandConstant('{tmp}MyDll.dll'), False);
     obj := CreateOleObject('MyDll.MyClass');
     //Using
     va := obj.MyFunction();
     //Finishing
     UnregisterServer(False, ExpandConstant('{tmp}MyDll.dll'), False);
     DeleteFile('{tmp}MyDll.dll');
    End;
    

    Suerte(祝你好运)


    你试图从你的.NET DLL中导入一个C风格的函数 - 这实际上与COM互操作无关。 COM互操作允许您将.NET对象作为COM对象激活,但不会将它们公开为C / C ++导出的函数/类型。

    如果你的函数不需要返回任何数据,为什么不做一个简单的.exe来调用你的函数,然后从你的设置中运行它呢?

    另外:请参阅innosetup支持新闻组,以获得更好的支持。

    链接地址: http://www.djcxy.com/p/44509.html

    上一篇: How can I call a .NET DLL from an Inno Setup script?

    下一篇: Picking a dll in a particular path while loading a shared library in Windows