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

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>
            日韩午夜免费视频| 亚洲国产精品久久久久秋霞蜜臀 | 一区二区高清视频| 老鸭窝毛片一区二区三区| 国产美女精品视频| 亚洲欧美日韩在线观看a三区| 91久久久久久久久久久久久| 久久中文在线| 在线播放豆国产99亚洲| 久久免费视频在线| 欧美一区二视频| 国产一区二区0| 久久久久久国产精品一区| 欧美中文字幕在线播放| 国产一区二区0| 老司机午夜免费精品视频| 亚洲精品视频在线观看免费| 免费91麻豆精品国产自产在线观看| 亚洲无毛电影| 激情五月***国产精品| 91久久久久久久久| 亚洲第一免费播放区| 久久综合精品国产一区二区三区| 在线欧美影院| 日韩午夜中文字幕| 国产日韩专区在线| 欧美激情性爽国产精品17p| 欧美老女人xx| 欧美一进一出视频| 欧美福利一区| 久久久青草青青国产亚洲免观| 久久综合伊人77777| 亚洲一品av免费观看| 久久er精品视频| 一区二区激情视频| 久久精品综合| 亚洲欧美韩国| 美脚丝袜一区二区三区在线观看| 亚洲砖区区免费| 欧美成人免费视频| 久久亚洲午夜电影| 国产精品毛片| 亚洲日本乱码在线观看| 国内精品伊人久久久久av影院| 欧美激情按摩| 激情综合激情| 欧美亚洲一级片| 亚洲欧美日韩成人| 欧美另类人妖| 欧美黄色小视频| 国产亚洲精品久久久久动| 日韩视频在线一区| 亚洲精品乱码久久久久久蜜桃91 | 亚洲人成网站999久久久综合| 国产精品欧美日韩| 日韩视频一区| 一区二区三区国产精品| 另类天堂视频在线观看| 久久亚洲图片| 国产午夜精品一区二区三区视频 | 亚洲电影免费观看高清完整版在线观看| 国产九九精品| 亚洲性av在线| 欧美一级在线播放| 国产精品久久久久久久久久免费看 | 国产精品美女久久久久久2018| 欧美黄色一区| 亚洲看片一区| 欧美激情一区二区三区在线| 亚洲经典视频在线观看| 亚洲美女中出| 欧美日韩不卡合集视频| 亚洲精品小视频在线观看| 亚洲日本欧美| 欧美日韩国产三级| 日韩亚洲欧美在线观看| 在线视频日本亚洲性| 欧美日韩伦理在线免费| 亚洲视频网在线直播| 亚洲欧美国产日韩天堂区| 国产精品日日摸夜夜添夜夜av| 亚洲一区观看| 久久男人资源视频| 亚洲国产成人av| 欧美日韩国产专区| 一区二区三区免费在线观看| 性久久久久久久久久久久| 国产亚洲一区二区三区在线观看 | 鲁大师成人一区二区三区 | 欧美欧美天天天天操| 99av国产精品欲麻豆| 欧美夜福利tv在线| 精品91免费| 欧美激情视频一区二区三区免费 | 亚洲第一精品在线| 亚洲影院污污.| 国内成人精品一区| 欧美黄在线观看| 亚洲午夜高清视频| 牛夜精品久久久久久久99黑人 | 国产精品专区一| 另类激情亚洲| 亚洲一区三区电影在线观看| 麻豆freexxxx性91精品| 一本久道久久久| 黑人巨大精品欧美一区二区小视频| 久久久久久久97| 夜夜爽夜夜爽精品视频| 久久亚洲一区二区| 亚洲视频中文| 亚洲国产精品一区制服丝袜| 欧美三区美女| 美女脱光内衣内裤视频久久网站| 一区二区激情| 亚洲国产精品久久久久秋霞不卡| 先锋影音国产精品| 99精品欧美一区二区三区综合在线| 国产精品乱人伦中文| 欧美黄污视频| 久久―日本道色综合久久| 亚洲综合电影一区二区三区| 欧美好吊妞视频| 久久性天堂网| 午夜精品久久久久| 99精品视频免费全部在线| 黄色影院成人| 国产伦精品一区二区三区免费迷| 欧美激情一区二区久久久| 久久免费国产精品| 欧美一区亚洲二区| 亚洲综合日韩在线| 一片黄亚洲嫩模| 亚洲麻豆视频| 亚洲日本中文字幕| 欧美国产专区| 欧美激情成人在线| 欧美国产另类| 免费视频一区| 欧美高清日韩| 亚洲电影欧美电影有声小说| 美女露胸一区二区三区| 久久视频精品在线| 久久久亚洲人| 久久嫩草精品久久久精品| 久久久99爱| 久久免费视频在线观看| 久久综合九色综合欧美就去吻| 欧美专区日韩视频| 久久一区二区三区四区五区| 久久精品国产清自在天天线| 久久久精品一区| 久久天天狠狠| 欧美成年人视频| 欧美激情日韩| 亚洲美女啪啪| 午夜视频一区在线观看| 久久成人精品视频| 久久综合电影| 欧美日韩另类在线| 国产精品麻豆成人av电影艾秋| 国产精品萝li| 国内精品久久久久久久影视麻豆| 国产一区二区三区免费观看| 一区二区三区在线观看国产| 亚洲国产精品ⅴa在线观看| 9色porny自拍视频一区二区| 亚洲香蕉网站| 久久久久久一区二区三区| 欧美激情bt| 亚洲黄色在线视频| 亚洲欧美国产精品va在线观看| 久久国产一二区| 欧美肥婆bbw| 国产精品视频一二| 亚洲国产精品久久久久秋霞影院 | 亚洲国产精品一区二区第四页av| 亚洲人久久久| 午夜精品一区二区三区在线| 久热精品视频| 国产精品视频免费观看www| 激情婷婷欧美| 亚洲视频免费观看| 久久全国免费视频| 亚洲美女黄网| 久久久久久久999精品视频| 亚洲欧洲另类| 亚洲一区二区毛片| 另类av一区二区| 国产精品视频网站| 日韩亚洲精品电影| 久久一区二区三区四区五区| 99riav久久精品riav| 欧美在线免费视频| 欧美日韩中文字幕综合视频 | 欧美大成色www永久网站婷| 国产精品久久99| 亚洲精品乱码久久久久久日本蜜臀| 欧美在线国产| 99riav1国产精品视频| 毛片av中文字幕一区二区|