我有一个C++ DLL这是一个插件到Adobe Acrobat的好方法。它需要经常(来回)和相当数量的复杂数据结构与WPF进程交谈。
任何想法可能是最好的方式。换句话说,需要一些有点长期和可维护的东西,换句话说,他们会喜欢一些让某个过程看起来像方法调用和某些基础设施部件进行编组和发送的东西。我尝试了Windows消息,但在ADOBE中遇到了一些冲突问题,对于导致dll获得Adobe加载CLR的任何内容也没有真正感兴趣。只有我脑海中出现的其他内容才被命名为管道或http。
在此先感谢什么是获得C++和WPF应用程序进行通信
0
A
回答
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。
相关问题
- 1. C#WPF应用程序:什么是“this”?
- 2. 获取网页与C++应用程序进行通信
- 3. ios应用程序与C#程序进行通信
- 4. WPF应用程序与Microsoft Project Server 2010进行通信
- 5. WPF +在多个应用程序实例之间进行通信
- 6. 与Windows应用程序之间进行通信的最佳方式是什么?
- 7. 通过C#应用程序与Web进行通信?
- 8. 是否有可能获得C#应用程序的进程开始信息?
- 9. C++和vb.net应用程序之间的进程间通信
- 10. arduino和rails应用程序如何通过wifi进行通信?
- 11. C++应用程序和硬件通信
- 12. C#WPF应用程序中主线程的职责是什么?
- 13. 获取iPhone应用程序与Adobe Air桌面应用程序进行通信
- 14. Metro应用程序如何通过串行端口进行通信而不是通过USB进行通信?
- 15. C++应用程序和web应用程序之间的通信
- 16. Java应用程序和C++应用程序集成/通信
- 17. Java应用程序和C++应用程序之间的通信
- 18. 目标c iPhone应用程序和Mac应用程序通信
- 19. 与MySql进行c#.net应用程序通信的问题
- 20. C++如何在应用程序的DLL之间进行通信?
- 21. 有没有一种方法可以在C++应用程序和C#应用程序之间进行通信?
- 22. 通过串行端口进行通信的Web应用程序
- 23. 如何在python和mac应用程序之间进行通信?
- 24. 如何在iOS应用程序和php之间进行通信?
- 25. 如何在Windows和主应用程序之间进行通信?
- 26. 在Java SE和Java EE应用程序之间进行通信
- 27. 如何在Windows应用程序和Silverlight之间进行通信?
- 28. PLC - 在C#中使用Snap7的PC通信WPF应用程序
- 29. 获得通过串行通信C#
- 30. 使用IPC与Python和C#进行通信的最简单方法是什么?
内存映射文件会为你工作吗? –
COM是完全有效的解决方案。与管道/ MMF不同,您不需要创建自己的协议 –