2012-09-14 43 views
0

我有一个C++ DLL这是一个插件到Adobe Acrobat的好方法。它需要经常(来回)和相当数量的复杂数据结构与WPF进程交谈。
任何想法可能是最好的方式。换句话说,需要一些有点长期和可维护的东西,换句话说,他们会喜欢一些让某个过程看起来像方法调用和某些基础设施部件进行编组和发送的东西。我尝试了Windows消息,但在ADOBE中遇到了一些冲突问题,对于导致dll获得Adobe加载CLR的任何内容也没有真正感兴趣。只有我脑海中出现的其他内容才被命名为管道或http。
在此先感谢什么是获得C++和WPF应用程序进行通信

+0

内存映射文件会为你工作吗? –

+1

COM是完全有效的解决方案。与管道/ MMF不同,您不需要创建自己的协议 –

回答

1

命名管道可以做,但你不会得到只是调用函数的感觉。命名管道是相当低级别的IPC。其他IPC选项有:

  • Windows RPC,你绝对会感觉只是调用函数。
  • 有关托管在WPF应用程序中COM对象,并从Adobe插件叫什么呢?
1

我将与COM去:

  • 实现在WPF应用程序的接口
  • 生成类型库(例如,通过使用regasm
  • 导入类型库到C++ DLL
  • 通信

如果你需要双向通信,C++ DLL可以还实现了一个COM接口,然后通过WPF应用程序访问它。

这是我用来连接传统的C++与新的.NET服务应用程序,它的伟大工程。最大的问题是找到了解COM的人,但幸好这并不需要对COM有深入的了解。

0

与COM您的提示是非常野趣。我试图实现这个概念。 我已经创建了一个接口,在我的WPF CallDllFromWpf3Interface项目:

using System.Runtime.InteropServices; 

namespace CallDllFromWpf3Interface 
{ 
    [Guid("F6E0E2E8-CCC6-487B-8BF1-261265061E6A")] 
    public interface SetValueInterface 
    { 
    void SetValue(int value); 
    } 
} 

然后我就产生与regasm工具类型库: regasm CallDllFromWpf3Interface.exe/TLB

随着“OLEVIEW”的工具,我可以看到类型库和接口。

下一步是要创建一个名为“CallSetValueInterface”一个C++ DLL项目。

在我CallSetValueInterface.cpp文件我写这几行:

#import "D:\Thomas\Programming\WPF\Basics\CallDllFromWpf\CallDllFromWpf3Interface\CallDllFromWpf3Interface\bin\Debug\CallDllFromWpf3Interface.tlb" 

void 
CallSetValueInterface::startAcq(void) 
{ 
    CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); 
    CallDllFromWpf3Interface::SetValueInterfacePtr Svip("f6e0e2e8-ccc6-487b-8bf1-261265061e6a"); 
    Svip->SetValue(55); 
    Svip = NULL; 
    CoUninitialize(); 
} 

我复制“CallSetValueInterface.dll”到“CallDllFromWpf3Interface”项目的dll项目的成功构建之后。

最后,我改变了我的WPF代码:

#region SetValueInterface Members 

public void SetValue(int value) 
{ 
    MyValue = value; 
} 

#endregion 

[DllImport("CallSetValueInterface.dll", EntryPoint = "startAcq", ExactSpelling = true, SetLastError = true)] 
public static extern void StartAcqFromDll(); 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    StartAcqFromDll(); 
} 

当调试器来StartAcqFromDll()也出现了错误对话框中的“类型‘System.Runtime.InteropServices.SEHException’未处理的异常发生在CallDllFromWpf3Interface.exe”。

有人知道最新出错吗?

问候,

ThomasL。

相关问题