2012-07-18 81 views
0

我有一个应用程序,其中一个winform被C++/cli托管类初始化。他们都是独立的项目,生成dll,并与托管项目引用winform dll(显然)。从c#dll中回调C++/cli方法

因此,现在情况是在Winform中点击某个按钮,我需要在我的托管类中调用一个方法。我知道代表是要走的路,但是一些小代码片段或关于如何去做这件事的一些指示将非常有帮助。

回答

0

下面是一个从WPF调用的C++/CLI函数的示例。
在C++/CLI侧:

cppcli.h:

// cppcli.h 

#pragma once 

using namespace System; 

namespace cppcli 
{ 
    public ref class cppClass 
    { 
     public: 
      String^ cppFunction(int value); 
    }; 
} 

cppcli.cpp:

// This is the main DLL file. 

#include "stdafx.h" 
#include "cppcli.h" 

namespace cppcli 
{ 
    String^ cppClass::cppFunction(int value) 
    { 
     String^ message = gcnew String("The value you passed was: " + value); 
     return message; 
    } 
} 

然后在C#侧:

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    cppClass cppObj = new cppClass(); 
    string message = cppObj.cppFunction(42); 
    textBlock1.Text = message; 
} 

结果:
The meaning of life

+0

感谢您的回复。我编辑了上面的问题。我不想在C#项目中引用cli dll。那么你提出的soln仍然会工作吗? – Shashank 2012-07-22 09:29:27

+0

所以你想从C#中调用一个C++函数,但是没有引用C++ dll,因为它会导致循环依赖?在这种情况下,您将不得不重新考虑应用程序的设计。如果C++项目被编译为一个你手动添加到你的C#项目并使用(我没有尝试过)的DLL,你可能能够解决它,但你应该重新考虑设计或者有一些您的项目之间有更多图层。 – 2012-07-22 09:52:18