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

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://www.shnenglu.com/Files/mzty/MixedNativeAndCLITest.rar
posted on 2008-11-08 13:26 BeyondCN 閱讀(890) 評論(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>
            伊人久久婷婷| 亚洲精选视频在线| 欧美视频1区| 免费观看国产成人| 国产精品视频九色porn| 亚洲第一网站| 国内精品一区二区| 亚洲与欧洲av电影| 一区二区三区精品视频| 美女黄毛**国产精品啪啪| 久久精品国产99精品国产亚洲性色 | 亚洲精品免费在线| 久久精品1区| 久久高清国产| 国产精品免费网站在线观看| 91久久中文字幕| 亚洲娇小video精品| 久久综合电影| 欧美aaa级| 亚洲国产一区视频| 久久亚洲综合| 欧美激情一区二区三级高清视频| 国产日韩综合一区二区性色av| 亚洲午夜精品久久久久久app| 一区二区三区日韩| 欧美小视频在线| 一本色道久久加勒比精品| 99在线热播精品免费| 欧美国产在线电影| 亚洲欧洲一区二区天堂久久| 亚洲另类春色国产| 欧美日韩在线观看一区二区三区| 亚洲免费观看| 亚洲综合精品一区二区| 欧美视频日韩| 亚洲宅男天堂在线观看无病毒| 先锋影音久久| 国产一区成人| 免费成人性网站| 免费av成人在线| 亚洲精品久久7777| 欧美日韩精品一本二本三本| 一区二区三区欧美激情| 亚洲欧美在线观看| 国产一区视频在线看| 久久久久久91香蕉国产| 欧美激情精品久久久久久大尺度| 亚洲精品一区久久久久久| 欧美色综合网| 欧美一区二区三区精品| 欧美风情在线观看| 亚洲网站在线| 国内精品视频在线观看| 欧美成人精品在线视频| 99成人在线| 久久久久国产精品一区二区| 亚洲黄色免费| 国产精品v片在线观看不卡| 亚洲综合精品| 欧美粗暴jizz性欧美20| 亚洲男人第一网站| 韩日精品视频一区| 欧美日韩国产专区| 欧美一区二区视频免费观看| 亚洲激情六月丁香| 久久久久久一区二区| 日韩视频一区二区在线观看| 国产欧美一区二区白浆黑人| 欧美sm视频| 欧美一级在线亚洲天堂| 日韩亚洲欧美高清| 老司机亚洲精品| 亚洲欧美一区二区三区极速播放| 1024精品一区二区三区| 国产精品成人国产乱一区| 久久久久天天天天| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 久久久久国产免费免费| 一区二区三区.www| 亚洲高清毛片| 国产日韩一区二区三区| 欧美日韩一视频区二区| 麻豆精品一区二区综合av | 一区二区三区精品视频在线观看| 久久在线免费观看| 午夜精品区一区二区三| 亚洲美女区一区| 亚洲国产成人在线视频| 国产午夜一区二区三区| 国产精品ⅴa在线观看h| 欧美成人中文字幕| 老色鬼精品视频在线观看播放| 亚洲欧美日韩国产中文在线| 99精品国产高清一区二区| 亚洲国产美国国产综合一区二区| 久久久久成人精品| 久久丁香综合五月国产三级网站| 一区二区三区四区五区精品视频| 亚洲国产精品久久久久秋霞不卡| 国产一区二区三区高清播放| 国产精品蜜臀在线观看| 欧美日韩福利在线观看| 欧美韩日高清| 欧美国产视频日韩| 欧美成人午夜影院| 欧美华人在线视频| 欧美极品在线视频| 欧美日本不卡| 欧美日韩视频在线第一区| 欧美人妖在线观看| 欧美区在线观看| 欧美日韩一区二区视频在线| 欧美日韩国产综合视频在线| 欧美日韩一二三四五区| 欧美日韩成人网| 欧美日韩一区免费| 国产精品日韩精品| 国产欧美综合一区二区三区| 国产亚洲激情视频在线| 国产伊人精品| 亚洲福利视频免费观看| 亚洲激情在线观看| 一本色道久久88综合亚洲精品ⅰ | 久久婷婷色综合| 免费看的黄色欧美网站| 欧美激情一区二区三级高清视频 | 亚洲一区二区三区三| 亚洲综合国产激情另类一区| 欧美一区二区视频在线观看2020| 欧美综合国产| 欧美成人午夜激情| 日韩午夜电影| 午夜精品视频在线观看| 老**午夜毛片一区二区三区| 欧美激情视频一区二区三区在线播放 | 在线观看成人av| 99精品热视频只有精品10| 亚洲午夜一区| 久久综合精品国产一区二区三区| 欧美粗暴jizz性欧美20| 99精品国产热久久91蜜凸| 午夜欧美大尺度福利影院在线看 | 免费在线观看成人av| 欧美午夜视频在线观看| 国产一区二区三区精品久久久 | 精品成人一区二区| 99精品视频一区| 欧美在线高清| 欧美激情一区二区| 亚洲欧美精品在线| 欧美成年人视频网站欧美| 国产精品麻豆va在线播放| 在线观看一区视频| 亚洲欧美激情诱惑| 亚洲高清视频在线| 欧美一级片在线播放| 欧美日韩在线免费观看| 韩日欧美一区二区| 亚洲欧美激情四射在线日 | 亚洲一区二区黄| 另类酷文…触手系列精品集v1小说| 欧美视频精品一区| 亚洲国产日韩欧美综合久久 | 久久女同精品一区二区| av成人免费| 欧美成人网在线| 伊甸园精品99久久久久久| 亚洲一区二区三区四区五区午夜 | 久久久久久久久久久久久久一区| 亚洲人午夜精品| 麻豆精品视频在线| 韩国精品在线观看| 午夜精品一区二区三区四区| 亚洲精品123区| 久热综合在线亚洲精品| 国产欧美在线视频| 亚洲欧美综合另类中字| 亚洲精品一区在线观看| 欧美mv日韩mv国产网站app| 黄色欧美日韩| 久久久久这里只有精品| 亚洲欧美日韩综合| 国产精品高潮呻吟久久| 亚洲午夜精品| 亚洲乱码日产精品bd| 欧美激情精品久久久久久大尺度| 一区在线影院| 久久亚洲午夜电影| 久久爱www.| 在线精品视频一区二区三四| 久久久久综合网| 欧美一区二区三区在| 国产午夜精品麻豆| 久久久另类综合| 久久久综合网站| 亚洲高清不卡av| 亚洲国产精品一区二区久| 欧美大尺度在线| 一本大道久久精品懂色aⅴ| 99v久久综合狠狠综合久久|