【发布时间】:2017-03-08 14:39:03
【问题描述】:
我有一个使用非 unicode 版本的 inno 暴露为 com 对象的工作 .net dll。它已经工作了很长时间,没有任何变化。我正在尝试转换为 inno 的 unicode 版本,但遇到了调用 CreateOleObject 现在抛出“参数不正确,ProgId:***”的问题
要重新创建此问题...
创建一个名为 samplecom 的 C# 项目,并在项目属性/程序集信息中将程序集标记为 COM-Visible
在默认的 Class1.cs 文件中使用以下代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace samplecom
{
[ComVisible(true)]
public class MyClass
{
[ComVisible(true)]
public string MyMethod()
{
return "Hello from COM dll";
}
}
}
构建项目,然后以管理员身份从 DOS/命令提示符使用 RegAsm 注册 dll,注意:以下假设您与 dll 或 samplecom\bin\debug 文件夹位于同一目录中
c:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe samplecom.dll /tlb:samplecom.tlb /codebase
然后使用以下脚本测试使用非 unicode 和 unicode 版本的 inno
[Setup]
AppName=My Sample COM
AppVersion=1.0
DefaultDirName={pf}\samplecom
[Code]
Var
comObject: Variant;
function NextButtonClick(CurPage: Integer): Boolean;
var
hWnd: Integer;
begin
if CurPage = wpWelcome then begin
comObject := CreateOleObject('samplecom.MyClass');
log(comObject.MyMethod());
end;
Result := True;
end;
这里是 inno 的 ansi 版本的输出
[15:50:23.779] *** Setup started
[15:50:25.435] Setup version: Inno Setup version 5.5.8 (a)
[15:50:25.437] Original Setup EXE: C:\dev\innosandbox\Output\setup.exe
[15:50:25.439] Setup command line: /SL5="$82622,56832,56832,C:\dev\innosandbox\Output\setup.exe" /SPAWNWND=$92602 /NOTIFYWND=$1A2580 /DEBUGWND=$5310D8
[15:50:25.440] Windows version: 10.0.14393 (NT platform: Yes)
[15:50:25.441] 64-bit Windows: Yes
[15:50:25.443] Processor architecture: x64
[15:50:25.445] User privileges: Administrative
[15:50:25.446] 64-bit install mode: No
[15:50:25.450] Created temporary directory: C:\Users\Keith\AppData\Local\Temp\is-E13L9.tmp
[15:50:35.234] Hello from COM dll
更新:2017 年 3 月 9 日
这是项目的链接以及 inno 脚本的副本。
https://www.dropbox.com/s/nxkwtgm086dtokv/InnoCom.zip?dl=0
我不确定它是否相关或不同的问题,但使用 vbscript/cscript 我可以使用 32 位 vbscript/cscript 加载 COM 对象,但使用 64 位 vbscript/cscript 加载失败
test.vbs 文件
Dim objXL
Set objXL = WScript.CreateObject("InnoCom.Inno")
【问题讨论】:
-
我在帖子中添加了示例代码
-
注意:regasm 必须以管理员身份运行
-
你确定它可以在 Ansi 版本的 Inno Setup 中工作吗?我在 Ansi 和 Unicode 版本中都遇到了相同(相似)的错误。
-
是的,我看到log命令的输出,你在ansi版本中遇到什么错误?
标签: inno-setup