• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

            NativeC++通過CLI調用C#的Form


            一 調用方法

                  Native C++的project調用C#的DLL,一般有3中方法:
                  1)通過COM封裝
                  2)通過CLI/C++的Wrapper
                  3)  在VS中可以直接修改NativeC++的project或是部分文件為使用CLR來調用C#的DLL

            二 實例
            1)C#的一個MyForm類,有public函數ShowMyForm()
            using System;
            using System.Collections.Generic;
            using System.Text;
            using System.Windows.Forms;

            namespace CsharpDLL
            {
                
            public class MyForm : Form
                
            {
                    
            private Button button1;

                    
            public void ShowMyForm()
                    
            {
                        
            this.ShowDialog();
                    }

                    
            public MyForm()
                    
            {
                        InitializeComponent();
                        
            this.Text = "MyForm";
                        
            this.StartPosition = FormStartPosition.CenterScreen;
                    }

                    
            private void InitializeComponent()
                    
            {
                        
            this.button1 = new System.Windows.Forms.Button();
                        
            this.SuspendLayout();
                        
            // 
                        
            // button1
                        
            // 
                        this.button1.Location = new System.Drawing.Point(11074);
                        
            this.button1.Name = "button1";
                        
            this.button1.Size = new System.Drawing.Size(7523);
                        
            this.button1.TabIndex = 0;
                        
            this.button1.Text = "TestMessageBox";
                        
            this.button1.UseVisualStyleBackColor = true;
                        
            this.button1.Click += new System.EventHandler(this.button1_Click);
                        
            // 
                        
            // MyForm
                        
            // 
                        this.ClientSize = new System.Drawing.Size(292266);
                        
            this.Controls.Add(this.button1);
                        
            this.Name = "MyForm";
                        
            this.ResumeLayout(false);

                    }


                    
            private void button1_Click(object sender, EventArgs e)
                    
            {
                        MessageBox.Show(
            "Hello, i am a Csharp Form!");
                    }

                }

            }


            2)C#的exe調用
            using System;
            using System.Collections.Generic;
            using System.Text;

            namespace CsharpTest
            {
                
            class Program
                
            {
                    
            static void Main(string[] args)
                    
            {
                        System.Console.WriteLine(
            "Csharp main funtion start:");
                        CsharpDLL.MyForm myForm 
            = new CsharpDLL.MyForm();
                        myForm.ShowMyForm();
                        System.Console.WriteLine(
            "Csharp main function end!");
                    }

                }

            }


            3)CLI/C++的warpper,DLLexport函數CallCsharpForm(),此函數中調用C#的MyForm
            CPPCLIPROXYDLLFORCSHARPDLL_API void CallCsharpForm();

            #
            using "../debug/CsharpDll.dll"

            CPPCLIPROXYDLLFORCSHARPDLL_API 
            void CallCsharpForm()
            {
                CsharpDLL::MyForm
            ^ myForm = gcnew CsharpDLL::MyForm();
                myForm
            ->ShowMyForm();
            }

            4)NativeC++的exe調用CLI的Wrapper來間接的調用MyForm
            #include "stdafx.h"
            #include 
            <iostream>
            #pragma comment(lib, 
            "../debug/CppCLIProxyDLLForCsharpDLL.lib")

            void CallCsharpForm();

            int _tmain(int argc, _TCHAR* argv[])
            {
                std::cout
            <<" Cpp Main function start:"<<std::endl;
                CallCsharpForm();
                std::cout
            <<" Cpp Main function end!"<<std::endl;
                
            return 0;
            }

            三 總結
            要調試最好修改編譯選項為Mixed。

            代碼下載: http://www.shnenglu.com/Files/mzty/CppCallCsharpByCLI.rar

            posted on 2007-12-25 10:51 夢在天涯 閱讀(8252) 評論(2)  編輯 收藏 引用 所屬分類: CPlusPlusC#/.NETManage c++ /CLI

            評論

            # re: NativeC++通過CLI調用C#的Form 2008-09-12 20:43 vvvxxx

            用NativeC++->C++/CLI->C#  回復  更多評論   

            # re: NativeC++通過CLI調用C#的Form 2009-05-19 14:00 我不清楚是誰

            不錯...  回復  更多評論   

            公告

            EMail:itech001#126.com

            導航

            統計

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1804430
            • 排名 - 5

            最新評論

            閱讀排行榜

            久久久久人妻一区二区三区| 久久综合九色综合精品| 性做久久久久久免费观看| 久久精品中文字幕一区| 国产精品免费福利久久| 精品免费久久久久国产一区| 色偷偷久久一区二区三区| 国产精品一区二区久久精品无码| 久久精品国产色蜜蜜麻豆| 久久夜色精品国产亚洲| 中文字幕乱码人妻无码久久| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久久亚洲欧洲日产国码是AV| 久久Av无码精品人妻系列 | 99久久99久久久精品齐齐| 久久99精品免费一区二区| 欧美精品久久久久久久自慰| 亚洲精品美女久久久久99小说 | 久久AV高清无码| 狠狠综合久久AV一区二区三区| 久久久久国产一区二区三区| 久久久青草久久久青草| 久久久亚洲欧洲日产国码aⅴ | 国产精品99久久精品| 色综合久久无码中文字幕| 国产欧美久久久精品影院| 久久久精品波多野结衣| 99久久精品九九亚洲精品| 久久国产精品久久国产精品| 久久99热只有频精品8| 久久精品无码一区二区无码| 久久天天躁狠狠躁夜夜网站 | 日韩精品久久久久久久电影| 久久996热精品xxxx| 国产A级毛片久久久精品毛片| 色综合久久中文综合网| 99久久免费只有精品国产| 国产成人精品久久亚洲高清不卡 | 91超碰碰碰碰久久久久久综合| 97久久精品人人做人人爽| 久久本道久久综合伊人|