2013-08-29 140 views
0

我成功下载Autohotkey_H 1.1包从AutoHotkey.dll: “新CoCOMServer()” 导致异常

http://www.autohotkey.net/~HotKeyIt/AutoHotkey/files/AutoHotkey-txt.html

然后我成功注册了Win32w版本(在 “Win32w” 文件夹)中的AutoHotkey的.dll与regsvr32。

然后我启动了Visual Studio 2012,启动了一个新的Project,并成功地在项目中引用了该DLL。

该项目只以下代码:

class Program { 
    static void Main(string[] args) { 
     CoCOMServer ahkThread = new CoCOMServer(); 
    } 
    } 

在运行的代码,就会出现以下错误:

http://imageshack.us/f/822/pn3y.png (StackOverflowException在mscorlib.dll)

我使用Windows 7 64位。该错误发生在2台具有SAME设置的不同机器上。

有没有人成功地使用了Visual Studio的DLL,并给我一些提示,你做了什么不同?

编辑:

而且,这并不在VB中工作:

Sub atest() 
Dim AhkCom As Object 
Set AhkCom = CreateObject("AutoHotkey.Script") 
AhkCom.ahktextdll("MsgBox Hello World!" & Chr(13) & "ExitApp") 
End Sub 

而且neiter做到这一点:

dynamic ahk = Activator.CreateInstance(Type.GetTypeFromProgID("AutoHotkey.Script.UNICODE")); 
ahk.ahktextdll("msgbox hello world"); 

DOES在AutoHotkey的itsself工作:

AhkCom := ComObjCreate("AutoHotkey.Script") 
AhkCom.ahktextdll("MsgBox Hello World!`nExitApp") 
While AhkCom.ahkReady() 
    Sleep, 100 
MsgBox Exiting now 

最后一个证明了DLL实际上正在工作。

实际上,它非常清楚地表明问题是Visual Studio特定的。到现在为止,也试过了2010年。

如果有人能告诉我我做错了什么,我会永远感激。我是否需要指定比这两行代码更多的内容?用Interop做些什么?我没有任何线索。

回答

0

如果你看看(在VB中)在其网站上的例子

Sub atest() 
Dim AhkCom As Object 
Set AhkCom = CreateObject("AutoHotkey.Script") 
AhkCom.ahktextdll("MsgBox Hello World!" & Chr(13) & "ExitApp") 
End Sub 

这说明了如何连接到COM服务器。的CreateObject()当然是关键

+0

C#等价物将是Activator.CreateInstance(Type.GetTypeFromProgID(“AutoHotkey.Script”)); 同样的错误! – cdbeelala89

+0

我建议你使用VB作为测试COM服务器,如果VB.Net示例不起作用,你将无法从C#连接。 C#4.0支持等效动态绑定 –

+0

确定在VB中尝试了您的代码。同样的错误。 – cdbeelala89

0

要改正错误,你需要注册正确的DLL,它位于 多线程DLL MD文件夹,一旦你这样做的Visual Basic代码将工作 我面对同样的问题,并得到了解决办法,因此我很乐意 帮助你