青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 17,  comments - 2,  trackbacks - 0


一 混合類

所謂混合類是指CLI/C++中native的Class中可以包含CLR對象,CLR的class也可以包含Naitve的對象。

1)native的class中包含CLR對象,必須通過gcroot<>或auto_gcroot<>。
2)CLR中的class中包含native的對象,必須是指針,也可以使用高手寫的CAutoNativePtr智能指針。


注意:C#中不能調(diào)用CLI/C++中的Native的class。同樣Native C++中也不能調(diào)用CLI/C++中的Ref的class。

二 實例

 高手的CAutoNativePtr類:

/***
    CAutoNativePtr - A smart pointer for using native objects in managed code.

    Author    :    Nishant Sivakumar
    Email    :    voidnish@gmail.com    
    Blog    :    
http://blog.voidnish.com
    Web        :    
http://www.voidnish.com     

    You may freely use this class as long as you include
    this copyright. 
    
    You may freely modify and use this class as long
    as you include this copyright in your modified version. 

    This code is provided "as is" without express or implied warranty. 
    
    Copyright ?Nishant Sivakumar, 2006.
    All Rights Reserved.
**
*/


#pragma once

template
<typename T> ref class CAutoNativePtr
{
private:
    T
* _ptr;

public:
    CAutoNativePtr() : _ptr(nullptr)
    
{
    }


    CAutoNativePtr(T
* t) : _ptr(t)
    
{
    }


    CAutoNativePtr(CAutoNativePtr
<T>% an) : _ptr(an.Detach())
    
{
    }


    template
<typename TDERIVED> 
        CAutoNativePtr(CAutoNativePtr
<TDERIVED>% an) : _ptr(an.Detach())
    
{
    }


    
!CAutoNativePtr()
    
{    
        delete _ptr;
    }


    
~CAutoNativePtr()
    
{
        
this->!CAutoNativePtr();
    }


    CAutoNativePtr
<T>% operator=(T* t)
    
{
        Attach(t);
        
return *this;
    }


    CAutoNativePtr
<T>% operator=(CAutoNativePtr<T>% an)
    
{
        
if(this != %an)
            Attach(an.Detach());
        
return *this;
    }


    template
<typename TDERIVED> 
        CAutoNativePtr
<T>% operator=(CAutoNativePtr<TDERIVED>% an)
    
{
        Attach(an.Detach());
        
return *this;
    }


    
static T* operator->(CAutoNativePtr<T>% an)
    
{
        
return an._ptr;
    }


    
static operator T*(CAutoNativePtr<T>% an)
    
{
        
return an._ptr;
    }


    T
* Detach()
    
{
        T
* t = _ptr;
        _ptr 
= nullptr;
        
return t;
    }


    
void Attach(T* t)
    
{
        
if(t)
        
{    
            
if(_ptr != t)
            
{
                delete _ptr;
                _ptr 
= t;
            }

        }

        
else
        
{
#ifdef _DEBUG
            
throw gcnew Exception(
                
"Attempting to Attach() a nullptr!");
#endif
        }
        
    }


    
void Destroy()
    
{
        delete _ptr;
        _ptr 
= nullptr;
    }

}
;

測試實例之CLI/C++文件:
// MixedNativeAndCLIDLL.h

#pragma once
#include 
<string>
#include 
<iostream>
#include 
<gcroot.h>
#include 
<msclr/auto_gcroot.h>

#include 
"AutoNative.h"

using namespace System;

namespace MixedNativeAndCLIDLL {

    
public class NativeClass
    
{
    
public:
        
int *pX;    
        NativeClass()
{pX = new int(10);}
        
~NativeClass()
        
{
            
if(pX != NULL)
            
{
                delete pX;
                pX 
= NULL;
            }

        }
        
    }
;

    
public ref class RefClass
    
{
    
public:
        
int x;    
        RefClass()
{x = 20;}
    }
;

    
public class MixedClass0
    
{
        
public:
            NativeClass nativeClass;
            
//RefClass refClass; // error c3265 and error c3149
            gcroot<RefClass^> refClass1;

            std::
string nativeStr;
            
//System::String refStr; // error c3265 and error c3149
            gcroot<System::String^> refStr1;

            MixedClass0()
            
{
                refClass1 
= gcnew RefClass();
                refStr1 
= gcnew System::String("i am a native class mixed some clr members.\n");
            }

            
~MixedClass0()
            
{            
                delete refClass1;
                delete refStr1;
            }


            
void PrintSelf()
            
{
                System::Console::WriteLine(
"my name is MixedClass0");
                System::Console::WriteLine(refClass1
->x);
                System::Console::WriteLine(refStr1);
            }

    }
;

    
public class MixedClass1
    
{
        
public:
            NativeClass nativeClass;
            
//RefClass refClass; // error c3265 and error c3149
            msclr::auto_gcroot<RefClass^> refClass1;

            std::
string nativeStr;
            
//System::String refStr; // error c3265 and error c3149
            msclr::auto_gcroot<System::String^> refStr1;

            MixedClass1()
            
{
                refClass1 
= gcnew RefClass();
                refStr1 
= gcnew System::String("i am a native class with some clr members.\n");
            }

            
~MixedClass1()
            
{
                
// no need to delete.
            }
        

            
void PrintSelf()
            
{
                System::Console::WriteLine(
"my name is MixedClass1");
                System::Console::WriteLine(refClass1
->x);
                System::Console::WriteLine(refStr1);
            }

    }
;

    
public ref class MixedClass2
    
{
        
public:
            
//NativeClass nativeClass; // error c4368
            NativeClass * nativeClass1;
            RefClass
^ refClass; 
            
            
//std::string nativeStr; // error c4368
            std::string *nativeStr1;
            System::String
^ refStr; //     

            MixedClass2()
            
{
                nativeClass1 
= new NativeClass();
                nativeStr1 
= new std::string("i am a clr class with some native members.\n");
            }

            
~MixedClass2()
            
{
                delete nativeClass1;
                delete nativeStr1;
            }

            
!MixedClass2(){}

            
void PrintSelf()
            
{
                System::Console::WriteLine(
"my name is MixedClass2");
                std::cout
<<*(nativeClass1->pX)<<std::endl;
                std::cout
<<*nativeStr1<<std::endl;                
            }

    }
;
    
    
public ref class MixedClass3
    
{
        
public:
            
//NativeClass nativeClass; // error c4368
            CAutoNativePtr<NativeClass> nativeClass1;
            RefClass
^ refClass; 
            
            
//std::string nativeStr; // error c4368
            CAutoNativePtr<std::string> nativeStr1;
            System::String
^ refStr; //     

            MixedClass3()
            
{
                nativeClass1 
= new NativeClass();
                nativeStr1 
= new std::string("i am a clr class with some native members.\n");
            }

            
~MixedClass3(){}
            
!MixedClass3(){}

            
void PrintSelf()
            
{
                System::Console::WriteLine(
"my name is MixedClass3");
                std::cout
<<*(nativeClass1->pX)<<std::endl;
                std::cout
<<*nativeStr1<<std::endl;                
            }

    }
;
}


測試實例之C#調(diào)用文件:
using System;
using System.Collections.Generic;
using System.Text;

namespace CsharpTest
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            MixedNativeAndCLIDLL.MixedClass0 mixedClass0 
= new MixedNativeAndCLIDLL.MixedClass0();
            
//mixedClass0.PrintSelf();
            MixedNativeAndCLIDLL.MixedClass1 mixedClass1 = new MixedNativeAndCLIDLL.MixedClass1();
            
//mixedClass1.PrintSelf();
            MixedNativeAndCLIDLL.MixedClass2 mixedClass2 = new MixedNativeAndCLIDLL.MixedClass2();
            mixedClass2.PrintSelf();
            MixedNativeAndCLIDLL.MixedClass3 mixedClass3 
= new MixedNativeAndCLIDLL.MixedClass3();
            mixedClass3.PrintSelf();
        }

    }

}


三 代碼下載

http://m.shnenglu.com/Files/mzty/MixedNativeAndCLITest.rar
posted on 2008-11-08 13:26 BeyondCN 閱讀(885) 評論(0)  編輯 收藏 引用 所屬分類: .NET
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            美女主播视频一区| 久久精品在线免费观看| 一区二区三区色| 欧美日韩综合久久| 久久精品国内一区二区三区| 国产精品日日摸夜夜摸av| 欧美www视频| 在线视频一区二区| 欧美一区二区三区的| 国产私拍一区| 亚洲激情一区二区| 国产精品国内视频| 欧美激情精品久久久久| 欧美视频在线观看免费| 久久九九免费| 欧美日韩免费观看一区二区三区 | 亚洲欧美网站| 麻豆成人综合网| 欧美亚洲尤物久久| 欧美激情第1页| 玖玖国产精品视频| 国产精品久久久久久久久久尿| 久久伊人精品天天| 国产精品久久久久一区二区| 久久噜噜噜精品国产亚洲综合| 欧美高清视频在线播放| 欧美专区第一页| 欧美丝袜一区二区三区| 毛片一区二区三区| 国产精品免费看| 日韩一区二区精品| 亚洲精品一区在线观看| 欧美一区视频| 午夜精品区一区二区三| 欧美经典一区二区| 欧美国产大片| 韩日视频一区| 欧美一区二区三区在线观看视频| 99国产精品久久久久久久成人热| 欧美一区二区三区视频| 亚洲一区二区三区高清不卡| 久久精品日韩欧美| 久久久999精品免费| 欧美性大战久久久久久久| 亚洲电影第三页| 亚洲高清精品中出| 久久一区二区三区四区| 久久精品网址| 国产欧美精品| 亚洲免费影院| 午夜国产不卡在线观看视频| 美女爽到呻吟久久久久| 久久米奇亚洲| 激情久久中文字幕| 久久国产福利| 免费在线观看精品| 亚洲高清精品中出| 欧美高清在线视频| 亚洲日本成人网| 9久re热视频在线精品| 免费看的黄色欧美网站| 麻豆精品精华液| 亚洲国产清纯| 欧美日本韩国一区二区三区| 欧美~级网站不卡| 亚洲七七久久综合桃花剧情介绍| 亚洲一级免费视频| 欧美1级日本1级| 欧美四级在线观看| 久久在线免费观看| 亚洲国产成人av| 欧美激情精品久久久久久黑人| 欧美国产一区二区| 日韩系列欧美系列| 国产精品久久久久久久久借妻| 亚洲一区二区av电影| 性久久久久久| 一区二区在线观看视频在线观看| 久久久久久亚洲综合影院红桃| 男女精品视频| 一区二区三区四区蜜桃| 欧美视频一区二区三区在线观看| 中文欧美日韩| 久久综合色影院| 亚洲精品一区二区三| 欧美日韩黄视频| 午夜精品视频一区| 亚洲电影网站| 欧美伊人久久| 亚洲日本中文字幕免费在线不卡| 欧美区日韩区| 欧美在线视频一区二区| 欧美高清自拍一区| 亚洲欧美网站| 亚洲日本va午夜在线电影| 欧美色123| 久久人人爽人人爽| 亚洲一区二区三区四区视频| 久久aⅴ国产紧身牛仔裤| 伊人久久久大香线蕉综合直播| 欧美福利一区二区| 午夜精品av| 亚洲精品一区二区三区樱花| 亚洲一区免费视频| 亚洲激情在线| 国产综合久久久久久| 欧美精品七区| 久久久综合香蕉尹人综合网| 亚洲国产片色| 玖玖玖国产精品| 羞羞答答国产精品www一本| 永久91嫩草亚洲精品人人| 欧美激情欧美激情在线五月| 一区二区三区欧美在线观看| 久久久久国色av免费观看性色| 亚洲精品女人| 一区二区在线看| 国产一区二区三区在线免费观看| 欧美精品1区2区| 另类国产ts人妖高潮视频| 亚洲欧美日韩国产精品| 亚洲国产精品va| 久久久人成影片一区二区三区观看| 一本色道**综合亚洲精品蜜桃冫| 国内精品免费午夜毛片| 欧美亚洲第一页| 欧美人在线视频| 欧美激情女人20p| 欧美大片国产精品| 免费成人高清| 久久久久久一区二区| 亚洲男人第一网站| 亚洲性夜色噜噜噜7777| 日韩系列在线| 日韩视频欧美视频| 亚洲另类自拍| 日韩亚洲精品视频| 99这里有精品| 亚洲视频一区二区在线观看| 欧美二区在线播放| 欧美好骚综合网| 欧美国产精品专区| 亚洲大片av| 欧美h视频在线| 国产亚洲一区精品| 国产三级精品三级| 国产一区二区日韩| 国产日韩精品一区| 国产视频在线观看一区| 国产精品扒开腿做爽爽爽视频| 欧美福利一区二区三区| 欧美第一黄网免费网站| 欧美成年人网| 欧美美女bb生活片| 欧美午夜精品一区| 国产精品中文在线| 狠狠色狠狠色综合系列| 国语自产偷拍精品视频偷 | 欧美成人国产va精品日本一级| 久久国产精品第一页 | 国产精品香蕉在线观看| 欧美日韩在线视频观看| 欧美日韩一区在线观看| 国产精品草莓在线免费观看| 欧美久久电影| 国产精品久久久久永久免费观看| 国产精品久久久久久影视| 国产精品一区一区三区| 国产一区日韩欧美| 91久久国产综合久久| 日韩一二三在线视频播| 亚洲夜晚福利在线观看| 午夜久久久久久| 噜噜爱69成人精品| 亚洲伦理自拍| 欧美一区二区视频网站| 久久久久久亚洲精品不卡4k岛国| 欧美xx视频| 国产精品五月天| 亚洲国产裸拍裸体视频在线观看乱了| 一区二区三区久久久| 欧美一区二区三区久久精品| 欧美专区亚洲专区| 亚洲福利久久| 亚洲欧美日韩电影| 欧美日本在线一区| 国内精品福利| 中国日韩欧美久久久久久久久| 欧美一站二站| 亚洲精品视频在线观看免费| 一区二区三区日韩欧美精品| 亚洲欧美中文字幕| 欧美精品99| 亚洲电影免费观看高清完整版在线| 一本色道婷婷久久欧美| 久久一区激情| 亚洲一区二区三| 欧美另类亚洲| 亚洲国产欧美久久| 久久综合久久久久88|