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

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>
            亚洲国产精品99久久久久久久久| aa亚洲婷婷| 久久se精品一区精品二区| 国产亚洲欧美日韩在线一区| 欧美在线3区| 久久国产欧美日韩精品| 国产在线精品一区二区中文| 久久久久久一区| 久久一二三国产| 亚洲靠逼com| 一道本一区二区| 国产一区二区三区在线观看网站| 久久看片网站| 男男成人高潮片免费网站| 一区二区国产在线观看| 亚洲午夜免费福利视频| 国产在线观看一区| 亚洲国产日韩欧美一区二区三区| 欧美精品一区二区三区在线看午夜| 亚洲性线免费观看视频成熟| 午夜精品一区二区在线观看 | 亚洲欧美日本伦理| 国产午夜精品久久久久久免费视| 蜜臀a∨国产成人精品| 欧美极品在线视频| 久久福利影视| 欧美激情精品久久久久久免费印度 | 免播放器亚洲| 亚洲在线成人精品| 久久久久久亚洲精品不卡4k岛国| 日韩视频中午一区| 欧美一区二区三区视频在线| 亚洲美女福利视频网站| 欧美一区二区三区视频在线观看| 亚洲人成网站777色婷婷| 亚洲一区二区三区在线视频| 亚洲国产成人精品久久久国产成人一区| 亚洲精品在线免费| 亚洲福利视频网| 午夜精品婷婷| 亚洲一区二区三区四区五区午夜| 久久精品免视看| 欧美一区二区成人| 欧美日韩aaaaa| 欧美大片在线影院| 国产欧美日本在线| 宅男精品导航| 亚洲精品国产拍免费91在线| 欧美在线一区二区| 亚洲欧美日韩成人| 欧美日韩在线亚洲一区蜜芽| 欧美电影在线观看完整版| 国产一区二区三区在线播放免费观看 | 欧美 日韩 国产一区二区在线视频| 国产精品美女久久久久aⅴ国产馆| 亚洲大黄网站| 在线视频成人| 久久久久高清| 久久一区二区三区国产精品 | 欧美v日韩v国产v| 巨胸喷奶水www久久久免费动漫| 国产精品久久午夜| 一区二区三区偷拍| 亚洲视频视频在线| 欧美日韩精品免费观看视一区二区| 欧美成人资源网| 1204国产成人精品视频| 久久精精品视频| 麻豆精品在线视频| 在线看视频不卡| 老牛国产精品一区的观看方式| 久久一二三国产| 一区二区三区在线观看欧美| 久久久国产成人精品| 久久综合婷婷| 亚洲国产精品一区制服丝袜| 免费国产一区二区| 亚洲国产影院| 亚洲综合视频网| 国产日韩欧美在线播放不卡| 久久大逼视频| 欧美成人亚洲| 一本一道久久综合狠狠老精东影业| 欧美日韩精品一区二区| 中文精品99久久国产香蕉| 香蕉免费一区二区三区在线观看| 国产精品久久一区二区三区| 欧美一区二区三区久久精品| 美日韩精品视频免费看| 亚洲精品一区二区网址| 国产精品wwwwww| 久久国产一区| 亚洲区第一页| 欧美一区二区三区啪啪| 在线观看一区欧美| 欧美日本一区二区高清播放视频| 亚洲视频成人| 蜜桃av一区二区| 亚洲视频免费在线观看| 国产一区二区精品丝袜| 欧美激情精品久久久久久蜜臀| 亚洲一区国产一区| 欧美xx69| 欧美影视一区| 亚洲三级影院| 国内精品久久久久久久影视麻豆| 男同欧美伦乱| 欧美一区二区三区四区视频| 亚洲国产毛片完整版| 久久精品国产久精国产爱| 亚洲人成在线观看一区二区| 国产精品麻豆欧美日韩ww| 欧美a级理论片| 亚洲永久精品大片| 亚洲欧洲一区二区在线观看| 久久久久久久国产| 亚洲一二三四久久| 亚洲国产成人高清精品| 国产日韩精品一区二区| 欧美性大战久久久久久久| 久久久在线视频| 午夜精品婷婷| 亚洲天堂成人在线观看| 亚洲精品一区二区三区蜜桃久| 久久久久久久999精品视频| 亚洲一区网站| 亚洲少妇诱惑| 日韩一区二区精品视频| 1024亚洲| 在线精品一区二区| 黄色成人在线网站| 国产一区二区三区视频在线观看| 国产精品久久久| 欧美日韩色婷婷| 欧美激情免费观看| 欧美福利小视频| 免费不卡欧美自拍视频| 麻豆免费精品视频| 老司机免费视频一区二区| 久久精品日产第一区二区| 午夜视频在线观看一区二区| 亚洲一区二区日本| 中文日韩在线视频| 亚洲国产mv| 在线精品视频一区二区三四| 国产精品永久免费在线| 久久精品免费观看| 免费观看欧美在线视频的网站| 亚洲人成啪啪网站| 亚洲欧美在线磁力| 欧美韩日高清| 国内一区二区三区在线视频| 99国产精品99久久久久久| 久久精品国产精品亚洲精品| 亚洲国产精品久久久久秋霞蜜臀| 亚洲女爱视频在线| 欧美国产日韩xxxxx| 国产欧美日韩亚洲| 一本大道久久a久久综合婷婷| 欧美在线二区| 一本一本久久| 欧美成人精品一区二区| 国产综合精品一区| 午夜在线成人av| 亚洲免费不卡| 巨胸喷奶水www久久久免费动漫| 国产精品视频一区二区高潮| 亚洲日本中文字幕区| 久久九九免费视频| 亚洲欧美日韩精品久久奇米色影视| 欧美成人第一页| 一区二区视频欧美| 久久久久久久久蜜桃| 亚洲一区免费| 国产精品chinese| 一本色道久久99精品综合 | 午夜精品久久| 国产精品播放| 亚洲视频综合| 亚洲精品乱码久久久久久按摩观| 久久午夜av| 黄色小说综合网站| 久久久xxx| 欧美一区激情| 国产香蕉97碰碰久久人人| 午夜日韩视频| 亚洲午夜久久久久久久久电影院| 欧美日韩精品福利| 亚洲视频一二区| 一区二区三区国产盗摄| 欧美日韩ab片| 中文国产成人精品久久一| 亚洲日本中文字幕区| 欧美激情五月| 一区二区三区欧美| 一二美女精品欧洲| 国产精品视频1区| 久久精品视频在线| 久久精品一本| 一区二区三区在线观看欧美|