如何创建中间库?

时间:2010-11-30 20:21:41

标签: c# c++ dll shared

我正在寻找一些关于如何用C ++和c#实现库的东西的信息。 我想知道的是如何解决以下问题:

  • C#应用程序: - 有一个窗口
  • C ++库:当有一个名为create_button(x,y)的函数时 调用后,它会在上面创建一个按钮 c#应用程序的窗口。 (如果 C#应用程序未运行,
    什么都不会发生)
  • C ++应用程序:-dynamicaly链接到C ++库并调用create_button() 功能

我如何处理这个问题,我很高兴听到你的一些想法。 平台是窗户。我的问题是,我如何让C ++库与c#应用程序通信以创建一个新按钮?它是链接的,套接字,...我特别想到Linux中的GTK +,你链接到gtk +库,但是库如何与GNOME接口来创建一个新窗口等等。我对编写dll并将它们链接到c#应用程序不感兴趣,我对创建一个中间库感兴趣。

4 个答案:

答案 0 :(得分:2)

我想不出任何理智的方式来做你想做的事。我相信你应该做的是创建函数来在C#应用程序中进行绘图,然后暴露一些消息传递接口,例如套接字,允许外部应用程序发送命令C#应用程序的消息来执行你所说的。当C#应用程序收到消息类型为DRAW_BUTTON的消息时,它会绘制按钮,其中包含在其收到的消息中指定的任何参数。

答案 1 :(得分:0)

由于C#是托管的,C ++是原生的,因此你会遇到问题。据我所知,在CLI中从托管调用本机代码的唯一方法是使用P / Invoke层,在这种情况下,您需要导入DLL,编写原型等。

此外,我相信P / Invoke调用是C函数,而不是C ++,尽管你可以通过添加一个C库来调用它来调用你的C ++库。

答案 2 :(得分:0)

如果你可以在C#中创建一个小但正确的HWND(不知道小部件),你可以使用它并使用C#的窗口作为父窗口创建一个c ++窗口。

几年前,我们为java / c ++进程对做了这个。但是,Java应用程序可以通过RPC向c ++应用程序报告HWND值,因此设置起来并不困难。

答案 3 :(得分:0)

鉴于您控制了C#应用程序的代码,并且您控制了C ++应用程序的代码,并且可能是“库之间”。我发现自己在问“为什么你这样做?”

如果您希望C ++应用程序能够在C#应用程序中添加给定按钮,并且按下该按钮以便能够与C ++应用程序通信,那么,就个人而言,我会使用标准IPC并且在C ++应用程序和C#应用程序之间有一个通信通道,只需让C ++应用程序通过IPC询问C#应用程序显示按钮,然后让C#app发送任何细节(最可能是按下按钮的事实) )通过相同的IPC频道访问C ++应用程序。

如果这条路线不起作用,那么我认为你需要澄清你目前要解决的问题,我认为你现在的'解决方案'是在错误的轨道上,所以答案告诉你如何实现你的当前“解决方案”会被误导。