• <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 夢在天涯 閱讀(8251) 評論(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

            搜索

            •  

            積分與排名

            • 積分 - 1804159
            • 排名 - 5

            最新評論

            閱讀排行榜

            久久亚洲电影| 国产亚洲精久久久久久无码| 久久e热在这里只有国产中文精品99| www.久久热| 色婷婷久久久SWAG精品| 无码人妻久久一区二区三区免费丨| 国产综合久久久久| 亚洲七七久久精品中文国产| 一本久久知道综合久久| 国产女人aaa级久久久级| 狠狠色丁香久久婷婷综合| 久久久久夜夜夜精品国产| 久久久国产精华液| 久久综合五月丁香久久激情| 久久精品国产久精国产思思 | 漂亮人妻被黑人久久精品| 国产精品久久久天天影视| 久久午夜夜伦鲁鲁片免费无码影视| 无码人妻精品一区二区三区久久 | 久久精品国产免费观看| 91麻豆精品国产91久久久久久 | 久久亚洲AV无码精品色午夜| 亚洲国产精品热久久| 久久久久久久久久久久中文字幕| 久久综合九色欧美综合狠狠| 91久久精品电影| 久久国产精品无码一区二区三区| 亚洲国产精品综合久久网络| 亚洲伊人久久大香线蕉苏妲己| 久久精品一本到99热免费| 久久精品一区二区三区AV| 久久久午夜精品福利内容| 久久影院久久香蕉国产线看观看| 一本久久久久久久| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 久久国产精品77777| 无码人妻久久一区二区三区| 亚洲色欲久久久综合网| 久久久亚洲裙底偷窥综合| 亚洲国产精品无码久久久蜜芽| 国产69精品久久久久APP下载|