Inno Setup 'Не удалось вызвать proc' при использовании 64-битной библиотеки классов - PullRequest
0 голосов
/ 01 декабря 2018
  • Inno Setup версия 5.6.1 (u).

  • Библиотека 64-разрядных классов Dev Studio 2015.

  • .NET Framework 4.6.1

  • Использует пакет UnamanagedExports.

Вот сценарий:

[Setup]
ArchitecturesInstallIn64BitMode=x64
ArchitecturesAllowed=x64

[Files]
Source: "DotNet64.dll"; Flags: dontcopy

[Code]
function TestFunction(): Boolean;
external 'Testing@files:DotNet64.dll stdcall setuponly delayload'; 

procedure CurPageChanged(CurPageID: Integer);
var
  ires : Boolean;
begin
  if CurPageID = wpWelcome then begin
    ires := TestFunction();
  end;
end;

Воткод C # DLL

using RGiesecke.DllExport;
using System.Runtime.InteropServices;
using Microsoft.Win32;

namespace DotNet64
{
    public class InnSetDLL
    {
      [DllExport("Testing", CallingConvention = CallingConvention.StdCall)]
      public static bool Testing()
      {
         return false;
      }
   }
}

Как только в скрипте вызывается TestFunction(), я получаю всплывающее окно:

Ошибка времени выполнения (в 2:55): не удалось вызватьproc.

1 Ответ

0 голосов
/ 01 декабря 2018

DotNet64.dll скомпилирован как 64-битная DLL?InnoSetup не может получить доступ к 64-битным DLL в соответствии с документацией .Вы можете скомпилировать его как 32-битную DLL или написать 64-битный EXE, который вызывает вашу 64-битную DLL и выполнить 64-битный EXE.

...