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

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#中不能調用CLI/C++中的Native的class。同樣Native C++中也不能調用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#調用文件:
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>
            欧美专区在线观看一区| 国产一区二区三区在线观看免费视频| 亚洲一区欧美激情| 91久久久精品| 91久久精品日日躁夜夜躁国产| 国产亚洲免费的视频看| 欧美日韩一区不卡| 香蕉成人久久| 久久综合九色99| 免费人成精品欧美精品| 久久青草久久| 欧美国产日韩一二三区| 欧美多人爱爱视频网站| 欧美激情一区二区久久久| 夜久久久久久| 亚洲欧美国产一区二区三区| 亚洲欧美综合精品久久成人| 久久综合成人精品亚洲另类欧美 | 国产一区二区三区黄视频| 国产综合色产在线精品| 亚洲人精品午夜在线观看| 一区二区三区欧美日韩| 亚洲中无吗在线| 欧美激情第8页| 国内精品模特av私拍在线观看| 亚洲乱码一区二区| 久久av最新网址| av成人天堂| 欧美成人日本| 亚洲国产网站| 亚洲欧美另类在线| 欧美日韩理论| 亚洲色图自拍| 在线视频精品一区| 欧美黄在线观看| 亚洲三级免费| 亚洲国产日韩一区| 免费观看成人www动漫视频| 1000部精品久久久久久久久| 欧美在线www| 欧美一区二区| 亚洲激情亚洲| 亚洲欧洲在线一区| 欧美日韩人人澡狠狠躁视频| 一区二区三区高清视频在线观看| 亚洲欧洲一区二区三区| 欧美激情中文字幕一区二区| 99re热精品| 日韩一级大片| 国产亚洲二区| 亚洲激情一区二区三区| 国产精品久久久久久久久久久久久久| 亚洲天堂成人在线视频| 欧美一区日韩一区| 日韩亚洲国产欧美| 久久av一区| 欧美精品xxxxbbbb| 欧美一级成年大片在线观看| 校园激情久久| 午夜视频在线观看一区| 国产一区二区三区成人欧美日韩在线观看 | 久久亚洲综合色一区二区三区| 亚洲国产成人porn| 麻豆av福利av久久av| 欧美在线视频a| 久久久久久黄| 久久综合给合久久狠狠狠97色69| 国产农村妇女毛片精品久久麻豆| 欧美mv日韩mv国产网站| 国产精品久久9| 最新高清无码专区| 一区二区在线视频| 久久aⅴ国产紧身牛仔裤| 亚洲永久在线观看| 久久久久久穴| 亚洲国产精品成人一区二区| 一区二区三区在线视频播放| 久久久久天天天天| 美女视频黄免费的久久| 在线观看欧美成人| 老牛国产精品一区的观看方式| 久久另类ts人妖一区二区| 国产精品午夜电影| 怡红院精品视频在线观看极品| 午夜精品一区二区三区在线视| 久久久久91| 99re66热这里只有精品4| 国产精品乱码| 欧美成人tv| 久久久久久97三级| 久久久久久久97| 国产精品一区免费视频| 久久美女性网| 欧美成熟视频| 欧美日产一区二区三区在线观看| 欧美日本一道本| 午夜精品久久久久久久久久久久久| 欧美激情第8页| 牛人盗摄一区二区三区视频| 亚洲永久免费精品| 一区二区三区免费在线观看| 国产综合色在线| 国产精品久久久久久福利一牛影视 | 亚洲深夜福利网站| 日韩亚洲欧美成人| 亚洲精品一区二区三区福利| 亚洲精品社区| 欧美亚韩一区| 欧美日韩国产综合网| 欧美精品123区| 欧美高清视频一区二区三区在线观看| 在线亚洲一区二区| 一本久久青青| 久久成人精品视频| 久久综合色婷婷| 久久理论片午夜琪琪电影网| 欧美在线网站| 欧美一区二区视频在线观看| 一区二区三区 在线观看视| 99在线|亚洲一区二区| 国产精品一区二区久久国产| 欧美伦理91i| 国产日本欧美一区二区三区在线| 黄色成人在线| 亚洲伦伦在线| 销魂美女一区二区三区视频在线| 久久黄色级2电影| 一区二区三区欧美在线| 久久久欧美精品sm网站| 国产精品jvid在线观看蜜臀| 亚洲高清影视| 久久五月激情| 亚洲欧美网站| 久久精品免费观看| 亚洲福利视频一区二区| 亚洲黄色有码视频| 亚洲男女自偷自拍图片另类| 久久亚洲高清| 国产综合久久久久久| 亚洲先锋成人| 91久久线看在观草草青青| 久久xxxx精品视频| 国产精品丝袜白浆摸在线| 国产精品99久久久久久白浆小说| 午夜伦理片一区| 一区二区不卡在线视频 午夜欧美不卡在 | 国产一区二区三区不卡在线观看| 亚洲欧洲在线一区| 欧美aa国产视频| 欧美在线一区二区三区| 国产精品美女视频网站| 日韩亚洲欧美一区二区三区| 牛牛影视久久网| 欧美成人精品一区二区| 亚洲国产精品黑人久久久| 欧美国产亚洲另类动漫| 在线观看一区二区精品视频| 久久亚洲欧美| 欧美在线观看视频一区二区| 国产欧美日韩激情| 久久这里有精品视频| 久久精品视频在线观看| 亚洲人妖在线| 亚洲精品久久久久久久久久久| 欧美va天堂| 亚洲一区二区三区四区五区午夜| 亚洲国产精品电影| 欧美三日本三级少妇三99| 欧美一区二区三区四区在线观看地址| 亚洲午夜av在线| 国产日韩亚洲欧美| 欧美激情中文字幕乱码免费| 欧美精品免费看| 老鸭窝亚洲一区二区三区| 嫩草成人www欧美| 欧美一区二区三区免费大片| 美女网站久久| 欧美一区二区视频观看视频| 媚黑女一区二区| 久久亚洲综合色| 国产精品裸体一区二区三区| 欧美风情在线观看| 国外视频精品毛片| 亚洲天堂激情| 亚洲主播在线观看| 欧美日韩在线三级| 最新国产拍偷乱拍精品| 国产欧美一区二区三区久久人妖 | 男女激情视频一区| 国产日韩欧美在线播放不卡| a4yy欧美一区二区三区| 极品日韩久久| 久久99伊人| 麻豆精品视频在线观看| 国产老女人精品毛片久久| 一卡二卡3卡四卡高清精品视频 | 久久亚洲综合色| 国产一区二区三区在线观看视频| 欧美一区国产一区| 噜噜噜91成人网|