Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Silverlight COM路径问题_.net_Silverlight_Dll_Com_Native - Fatal编程技术网

.net Silverlight COM路径问题

.net Silverlight COM路径问题,.net,silverlight,dll,com,native,.net,Silverlight,Dll,Com,Native,我目前正在使用Silverlight的一些COM DLL,我遇到了一个奇怪的问题。我创建了两个.NET COM DLL,它们都通过DllImport引用其他DLL。他们工作得很好 然后我在项目中添加了第三个COM dll。此DLL还通过DllImport引用其他DLL。我一创建它,其他两个就中断了。它们抛出错误,表示找不到正在使用的其他DLL。然而,第三个dll工作正常 这就是我创建它们的方式 AutomationFactory.CreateObject("Com1"); AutomationF

我目前正在使用Silverlight的一些COM DLL,我遇到了一个奇怪的问题。我创建了两个.NET COM DLL,它们都通过DllImport引用其他DLL。他们工作得很好

然后我在项目中添加了第三个COM dll。此DLL还通过DllImport引用其他DLL。我一创建它,其他两个就中断了。它们抛出错误,表示找不到正在使用的其他DLL。然而,第三个dll工作正常

这就是我创建它们的方式

AutomationFactory.CreateObject("Com1");
AutomationFactory.CreateObject("Com2");
AutomationFactory.CreateObject("Com3");
同样,如果我只使用Com1和Com2,它们工作得非常好。如果我添加Com3,它可以正常工作,但其他两个无法找到其本机DLL

我甚至不调用Com3上的任何函数,只需创建它,其他函数就停止工作


有什么想法吗?你认为它可能是本地dll吗?我不明白第三个是如何工作的,但其他人不明白,你可能会认为,如果是本机dll破坏了某些东西,它们都会停止工作。

我找到了一种方法让它工作。但我仍然无法100%确定为什么需要这样做

如果我使用Directory.SetCurrentDirectory将当前目录设置为具有本机DLL的目录,它将正常工作


看起来Com3没有更改目录,但由于某种原因,它导致其他COM DLL在当前工作目录中查找,而不是在注册位置查找。

您如何确保可以找到这些本机DLL?如果什么都不做,那么第三个可以改变Windows使用的搜索策略,包括更改默认工作目录或更改PATH环境变量。这是我的想法,但我现在非常喜欢COM。我只是把本机dll和注册的COM dll放在同一个目录中。在第三个COM dll出现之前,这一切都很正常。我不知道如何使用COM对象处理工作目录。有什么方法可以让我更具体地了解DllImport吗?我只是尝试将完整路径作为名称,它可以找到它。我还尝试删除System32中的本机DLL,但仍然不起作用。