B?n nh?n đư?c c?nh báo linker khi b?n xây d?ng qu?n l? ph?n m? r?ng cho C++ DLL d? án

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 814472 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TRI?U CH?NG

B?n nh?n đư?c m?t trong các thông báo l?i sau đây lúc biên d?ch th?i gian ho?c th?i gian liên k?t:
Linker công c? l?i LNK2001
' chưa đư?c gi?i quy?t bên ngoài bi?u tư?ng "bi?u tư?ng" '

Linker công c? c?nh báo LNK4210
'.MÀN H?NH CRT ph?n t?n t?i; có th? đư?c unhandled t?nh initializes ho?c teminators'You nh?n đư?c c?nh báo Linker khi b?n xây d?ng qu?n l? ph?n m? r?ng cho C++ DLL d? án

Linker công c? c?nh báo LNK4243
' DLL có ch?a các đ?i tư?ng biên d?ch v?i/clr không đư?c liên k?t v?i /NOENTRY; h?nh ?nh không th? ch?y m?t cách chính xác '.
C?nh báo này có th? x?y ra trong th?i gian sau đây trư?ng h?p:
  • Khi b?n biên d?ch liên k?t các đ?i tư?ng v?i các /CLR chuy?n đ?i.
  • Khi b?n đang xây d?ng m?t trong nh?ng d? án sau đây: ASP.NET Web d?ch v? m?u; L?p thư vi?n m?u; ho?c Windows Control Thư vi?n m?u.
  • Khi b?n đ? thêm vào m? có s? d?ng các bi?n toàn c?u ho?c ngu?n g?c các l?p (t?c là, không __gc ho?c __value) v?i các thành viên d? li?u t?nh. Cho Ví d?, các ActiveX m?u thư vi?n (ATL), Microsoft Foundation Classes (MFC), và các l?p c l?n ch?y (CRT)
Chú ý: b?n có th? nh?n đư?c l?i LNK2001 và LNK4210 v?i các d? án đó là không b? ?nh hư?ng b?i v?n đ? mô t? trong bài vi?t này. Tuy nhiên, các d? án ch?c ch?n là b? ?nh hư?ng b?i v?n đ? mô t? trong bài vi?t này n?u vi?c gi?i quy?t m?t LNK2001 ho?c LNK4210 c?nh báo d?n đ?n m?t c?nh báo LNK4243, ho?c n?u liên k?t các d? án t?o ra m?t c?nh báo LNK4243.

NGUYÊN NHÂN

Các d? án đư?c t?o ra theo m?c đ?nh như là m?t đ?ng l?c liên k?t thư vi?n (DLL) mà không có b?t k? m?i liên k?t đ? b?n đ?a c?a thư vi?n (như CRT, ATL, ho?c MFC), và không có b?t k? bi?n toàn c?u ho?c các l?p h?c b?n x? v?i t?nh các thành viên d? li?u:
  • ASP.NET Web d?ch v? tiêu b?n
  • L?p thư vi?n m?u
  • Windows ki?m soát thư vi?n m?u
N?u b?n thêm m? có s? d?ng các bi?n toàn c?u ho?c các l?p h?c b?n x? v?i các thành viên d? li?u t?nh (ví d?, ATL, MFC và màn h?nh CRT thư vi?n dùng bi?n toàn c?u), b?n s? nh?n đư?c các thông báo l?i linker t?i th?i gian biên d?ch. Khi Đi?u này x?y ra, b?n ph?i thêm m? b?ng tay kh?i t?o bi?n t?nh. Cho thêm thông tin v? làm th? nào đ? làm đi?u này, h?y xem ph?n "Gi?i quy?t" này bài vi?t.

Đ? thu?n ti?n, bài vi?t này đ? c?p đ?n các bi?n toàn c?u và các thành viên d? li?u t?nh c?a các l?p h?c b?n x? như "th?ng kê" ho?c "các bi?n t?nh" t? th?i đi?m này v? phía trư?c.

V?n đ? này gây ra b?i DLL h?n h?p t?i v?n đ?. H?n h?p DLLs (có ngh?a là, DLLs có ch?a m? ngu?n g?c và đư?c qu?n l?) có th? g?p ph?i t?nh hu?ng b? t?c trong m?t s? trư?ng h?p nào khi đư?c n?p vào trong quá tr?nh đ?a ch? không gian, đ?c bi?t là khi h? th?ng là dư?i s? căng th?ng. Các thông báo l?i Linker đ? c?p ? trên đ? đư?c kích ho?t trong linker đ? đ?m b?o khách hàng có ? th?c v? ti?m năng cho b? t?c và cách gi?i quy?t các mà đư?c mô t? trong tài li?u này. Cho m?t mô t? chi ti?t c?a DLL h?n h?p t?i v?n đ?, xem whitepaper sau đây:
H?n h?p DLL t?i V?n đ?
http://msdn2.Microsoft.com/en-US/Library/aa290048 (vs.71) .aspx

GI?I PHÁP

Qu?n l? các ph?n m? r?ng cho các d? án C++ đư?c t?o ra như DLLs Theo m?c đ?nh không liên k?t v?i thư vi?n C/c ++ b?n x? như c run-time (CRT) thư vi?n, ATL ho?c MFC và không s? d?ng b?t k? các bi?n t?nh. Ngoài ra, các thi?t l?p d? án ch? ra r?ng các DLL nên đư?c liên k?t v?i các / NOENTRY tùy ch?n cho phép.

Đi?u này đư?c th?c hi?n b?i v? liên k?t v?i m?t đi?m nguyên nhân qu?n l? m? đ? ch?y trong th?i gian DllMain, đó không ph?i là an toàn (xem DllMain cho s? h?n ch? c?a đi?u b?n có th? làm trong th?i gian c?a nó ph?m vi).

M?t DLL mà không có m?t đi?m đ? có cách nào đ? kh?i t?o t?nh bi?n ngo?i tr? cho các lo?i r?t đơn gi?n như s? nguyên. B?n làm g? không thư?ng có các bi?n t?nh trong m?t / NOENTRY DLL.

Các thư vi?n ATL, MFC và màn h?nh CRT t?t c? d?a vào t?nh các bi?n, do đó, b?n c?ng không th? s? d?ng các thư vi?n t? bên trong các dll N?u không có s? s?a đ?i làm đ?u tiên.

N?u DLL ch? đ? h?n h?p c?a b?n c?n ph?i s? d?ng th?ng kê ho?c thư vi?n mà ph? thu?c vào t?nh h?c (ch?ng h?n như ATL, MFC ho?c màn h?nh CRT), sau đó b?n ph?i s?a đ?i DLL c?a b?n đ? cho các t?nh h?c cách th? công kh?i t?o.

Bư?c đ?u tiên đ? kh?i t?o hư?ng d?n s? d?ng là đ? đ?m b?o r?ng b?n không th? kh?i t?o t? đ?ng m?, mà là không an toàn v?i h?n h?p Dll và có th? gây ra b? t?c. Đ? vô hi?u hoá vi?c kh?i t?o m?, h?y làm theo các bư?c.

Lo?i b? các đi?m nh?p c?nh c?a DLL qu?n l?

  1. Liên k?t v?i / NOENTRY. Trong Gi?i pháp Explorer, b?m chu?t ph?i vào các d? án nút b?m Thu?c tính. Trong các Trang thu?c tínhh?p tho?i h?p, b?m vào Linker, b?m D?ng l?nh, và sau đó thêm này chuy?n sang các Tùy ch?n b? sungl?nh v?c.
  2. Liên k?t msvcrt.lib. Trong các Trang thu?c tính h?p tho?i h?p, b?m vàoLinker, b?m Đ?u vào., và sau đó thêm msvcrt.lib đ? các B? sung ph? thu?cb?t đ?ng s?n.
  3. Gỡ bỏ nochkclr.obj. Trên các Đ?u vào Trang (cùng m?t trang như trong trư?c đó bư?c), lo?i b? nochkclr.obj t? các B? sung ph? thu?c b?t đ?ng s?n.
  4. Liên k?t trong màn h?nh CRT. Trên các Đ?u vào Trang (như nhau Trang như trong bư?c trư?c), thêm __DllMainCRTStartup@12 đ? các L?c lư?ng bi?u tư?ng tham kh?ob?t đ?ng s?n.

    N?u b?n đang s? d?ng d?u nh?c l?nh, xác đ?nh các bên trên d? án thi?t l?p v?i nh?ng đi?u sau:
    LINK /NOENTRY msvcrt.lib /NODEFAULTLIB:nochkclr.obj /INCLUDE:__DllMainCRTStartup@12

S?a đ?i các thành ph?n mà tiêu th? DLL cho hư?ng d?n s? d?ng Initializiation

Sau khi b?n lo?i b? đi?m r? ràng, b?n ph?i s?a đ?i các thành ph?n tiêu th? DLL cho kh?i t?o hư?ng d?n s? d?ng, tùy thu?c vào cách r?ng DLL c?a b?n đư?c th?c hi?n:
  • DLL c?a b?n đư?c nh?p vào b?ng cách s? d?ng (xu?t kh?u) DLL__declspec(dllexport)), và ngư?i tiêu dùng c?a b?n không th? s? d?ng qu?n l? m? n?u h? đư?c liên k?t t?nh ho?c t? đ?ng đ? DLL c?a b?n.
  • DLL c?a b?n là m?t DLL d?a trên COM.
  • Ngư?i tiêu dùng c?a DLL c?a b?n có th? s? d?ng qu?n l? m? và DLL c?a b?n có ch?a m?t trong hai xu?t kh?u DLL ho?c qu?n l? đi?m nh?p c?nh.

S?a đ?i DLLs mà b?n nh?p vào b?ng cách s? d?ng xu?t kh?u DLL và Ngư?i tiêu dùng không th? s? d?ng qu?n l? m?

Đ? s?a đ?i DLLs mà b?n nh?p vào b?ng cách s? d?ng xu?t kh?u dll (__declspec(dllexport)) và ngư?i tiêu dùng không th? s? d?ng m? đư?c qu?n l?, theo các bư?c sau:
  1. Thêm hai m?i xu?t sang DLL c?a b?n, như đư?c hi?n th? ? đây M? s?:
    // init.cpp
    
    #include <windows.h>
    #include <_vcclrit.h>
    
    // Call this function before you call anything in this DLL.
    // It is safe to call from multiple threads; it is not reference
    // counted; and is reentrancy safe.
    
    __declspec(dllexport) void __cdecl DllEnsureInit(void)
    {
    	// Do nothing else here. If you need extra initialization steps,
    	// create static objects with constructors that perform initialization.
    	__crt_dll_initialize();
    	// Do nothing else here.
    }
    
    // Call this function after this whole process is totally done
    // calling anything in this DLL. It is safe to call from multiple
    // threads; is not reference counted; and is reentrancy safe.
    // First call will terminate.
    
    __declspec(dllexport) void __cdecl DllForceTerm(void)
    {
    	// Do nothing else here. If you need extra terminate steps, 
    	// use atexit.
    	__crt_dll_terminate();
    	// Do nothing else here.
    }
    
    Chú ý Visual C++ 2005, b?n ph?i thêm ph? bi?n ngôn ng? runtime h? tr? biên d?ch tùy ch?n)/CLR:oldSyntax) đ? thành công biên d?ch m?u m? trư?c đó. Đ? thêm ph? bi?n h? tr? th?i gian ch?y ngôn ng? biên d?ch tùy ch?n, h?y làm theo các bư?c sau:
    1. Nh?p vào Dự án, sau đó b?mProjectName Thu?c tính.

      Chú ý ProjectName là m?t gi? ch? cho tên c?a d? án.
    2. M? r?ng C?u h?nh thu?c tính, sau đó b?mT?ng quát.
    3. Trong ngăn bên ph?i, b?m vào đ? ch?n H? tr? th?i gian ch?y ngôn ng? ph? bi?n, cú pháp c? (/ clr:oldSyntax) trong cácPh? bi?n th?i gian ch?y ngôn ng? h? tr? các thi?t đ?t c?a d? án.
    4. Nh?p vàoÁp d?ng, sau đó b?m Ok.
    Đ? bi?t thêm thông tin v? th?i gian ch?y ngôn ng? ph? bi?n h? tr? tùy ch?n biên d?ch, ghé thăm Web site sau c?a Microsoft Developer Network (MSDN):
    http://msdn2.Microsoft.com/en-US/Library/k8d11d4s.aspx
    Các bư?c này áp d?ng cho toàn b? bài vi?t.
  2. DLL c?a b?n có th? có m?t s? ngư?i tiêu dùng. N?u nó không có nhi?u ngư?i tiêu dùng, thêm m? sau vào t?p tin .def DLL trong xu?t kh?u ph?n:
    DllEnsureInit	PRIVATE
    DllForceTerm	PRIVATE
    
    N?u b?n không thêm nh?ng d?ng này, và n?u b?n có hai DLLs xu?t kh?u ch?c năng, ?ng d?ng các liên k?t đ?n DLL s? có liên k?t l?i. Thông thư?ng, các ch?c năng xu?t kh?u có cùng tên. Trong trư?ng h?p multiconsumer, m?i ngư?i tiêu dùng có th? đư?c liên k?t t?nh ho?c t? đ?ng đ?n DLL c?a b?n.
  3. N?u ngư?i tiêu dùng t?nh đư?c liên k?t v?i t?p DLL, trư?c khi b?n s? d?ng th?i gian DLL l?n đ?u tiên, ho?c trư?c khi b?n s? d?ng b?t c? đi?u g? mà ph? thu?c vào nó trong ?ng d?ng c?a b?n, thêm các cu?c g?i sau đây:
    // Snippet 1
    
    typedef void (__stdcall *pfnEnsureInit)(void);
    typedef void (__stdcall *pfnForceTerm)(void);
    
    {
    	// ... initialization code
    	HANDLE hDll=::GetModuleHandle("mydll.dll");
    	If(!hDll)
    	{
    		// Exit, return; there is nothing else to do.
    	}
    	pfnEnsureInit pfnDll=::( pfnEnsureInit) GetProcAddress(hDll, 
       "DllEnsureInit");
    	if(!pfnDll)
    	{
    		// Exit, return; there is nothing else to do.
    	}
    	
    	pfnDll();
    	
    	// ... more initialization code
    }
    
  4. Sau khi s? d?ng cu?i c?a DLL trong ?ng d?ng c?a b?n, thêm các m? sau đây:
    // Snippet 2
    
    {
    	// ... termination code
    	HANDLE hDll=::GetModuleHandle("mydll.dll");
    	If(!hDll)
    	{
    		// exit, return; there is nothing else to do
    	}
    	pfnForceTerm pfnDll=::( pfnForceTerm) GetProcAddress(hDll, 
       "DllForceTerm");
    	if(!pfnDll)
    	{
    		// exit, return; there is nothing else to do
    	}
    	
    	pfnDll();
    	
    	// ... more termination code
    }
    
  5. N?u khách hàng t? đ?ng liên k?t v?i t?p DLL, chèn M? s? như sau:
    • Chèn đo?n 1 (xem bư?c 3) ngay l?p t?c sau khi các đ?u tiên LoadLibrary cho t?p DLL.
    • Chèn đo?n 2 (xem bư?c 4) ngay trư?c khi các cu?i cùng FreeLibrary cho t?p DLL.

Đ? s?a đ?i d?a trên COM DLL

  • S?a đ?i ch?c năng xu?t kh?u DLL DllCanUnloadNow, DllGetClassObject, EFS, và DllUnregisterServer như th? hi?n trong đo?n m? sau:
    //  Implementation of DLL Exports.
    
    #include <_vcclrit.h>
    
    STDAPI DllCanUnloadNow(void)
    {
        
        if ( _Module.GetLockCount() == 0 )
    	{
    		__crt_dll_terminate();
            return S_OK;
    	}
        else
        {
            return S_FALSE;
    
        }
    	
    }
    
    STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
    {
        if ( !( __crt_dll_initialize() ) )
    	{
    		return E_FAIL;
    	}
        else
        {
            return _Module.GetClassObject(rclsid, riid, ppv);
        }
    }
    
    STDAPI DllRegisterServer(void)
    {
    	if ( !( __crt_dll_initialize() ) )
    	{
    		return E_FAIL;
    	}
    	// Call your registration code here
        HRESULT hr = _Module.RegisterServer(TRUE)
     
        return hr;
    }
    
    
    STDAPI DllUnregisterServer(void)
    { 
        HRESULT hr = S_OK;
    	__crt_dll_terminate();
    
        // Call your unregistration code here
        hr = _Module.UnregisterServer(TRUE);
        return hr;
    }
    

S?a đ?i DLL có ch?a ngư?i tiêu dùng s? d?ng qu?n l? m? và xu?t kh?u DLL ho?c qu?n l? nh?p đi?m

Đ? s?a đ?i các DLL có ch?a ngư?i tiêu dùng s? d?ng qu?n l? m? và DLL xu?t kh?u ho?c qu?n l? nh?p đi?m, h?y làm theo các bư?c sau:
  1. Th?c hi?n m?t l?p qu?n l? v?i ch?c năng thành viên t?nh cho kh?i t?o và ch?m d?t. Thêm m?t t?p tin .cpp vào d? án c?a b?n, th?c hi?n m?t qu?n l? l?p h?c v?i các thành viên t?nh cho kh?i đ?u và ch?m d?t:
    // ManagedWrapper.cpp
    
    // This code verifies that DllMain is not automatically called 
    // by the Loader when linked with /noentry. It also checks some
    // functions that the CRT initializes.
    
    #include <windows.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <math.h>
    #include "_vcclrit.h"
    
    #using <mscorlib.dll>
    using namespace System;
    
    public __gc class ManagedWrapper {
    public:
    	static BOOL minitialize() {
    		BOOL retval = TRUE;
    		try {
               retval =  __crt_dll_initialize();
    		} catch(System::Exception* e) {
    			Console::WriteLine(e->Message);
    			retval = FALSE;
    		}
    		return retval;
    	}
    	static BOOL mterminate() {
    		BOOL retval = TRUE;
    		try {
                retval = __crt_dll_terminate();
    		} catch(System::Exception* e) {
    						Console::WriteLine(e->Message);
    			retval = FALSE;
    		}
    		return retval;
    	}
    };
    
    BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID 
    lpvReserved) {
    	Console::WriteLine(S"DllMain is called...");
    	return TRUE;
    } /* DllMain */
    
  2. G?i các ch?c năng này trư?c khi b?n tham kh?o đ? DLL và sau khi b?n đ? hoàn thành b?ng cách s? d?ng nó. G?i kh?i t?o và ch?m d?t tài kho?n c?a ch?c năng chính:
    // Main.cpp
    
    #using <mscorlib.dll>
    using namespace System;
    using namespace System::Reflection;
    #using "ijwdll.dll";
    
    int main() {
    	int retval = ManagedWrapper::minitialize();
        ManagedWrapper::mterminate();
    }
    

Ngư?i s? d?ng Visual c + +.NET 2002

Chú ý: M?c dù thông báo l?i linker LNK4243 không t?n t?i trong các Visual c + +.Phát hành s?n ph?m NET 2002, ngư?i s? d?ng Visual c++.NET 2002 nên th?c hi?n theo các hư?ng d?n v? nói trư?c khi phát tri?n các h?n h?p DLLs.

Visual c + +.NET 2003 s?n ph?m phát hành ch?a b? sung tiêu đ? đ? th?c hi?n vi?c kh?i t?o hư?ng d?n s? d?ng thu?n ti?n hơn. Đ? th?c hi?n các gi?i pháp li?t kê trong công tác đi?u này v?i Visual C++.NET 2002, b?n ph?i thêm m?t tiêu đ? t?p tin vào d? án c?a b?n đư?c g?i là _vcclrit.h v?i các văn b?n sau đây:
/***
* _vcclrit.h
*
*       Copyright (c) Microsoft Corporation. All rights reserved.
*
* Purpose:
*       This file defines the functions and variables used by user
*       to initialize CRT and the dll in IJW scenario.
*
****/

#pragma once

#ifdef __cplusplus
extern "C" {
#endif

extern IMAGE_DOS_HEADER __ImageBase;

BOOL WINAPI _DllMainCRTStartup(
        HANDLE  hDllHandle,
        DWORD   dwReason,
        LPVOID  lpreserved
        );
#ifdef __cplusplus
}
#endif

#ifdef _cplusplus
#define __USE_GLOBAL_NAMESPACE  ::
#else
#define __USE_GLOBAL_NAMESPACE
#endif

// Used to lock 
__declspec( selectany ) LONG  volatile __lock_handle = 0;

// Init called
__declspec(selectany) BOOL volatile __initialized = FALSE;

// Term called
__declspec( selectany ) BOOL volatile __terminated = FALSE;

__inline BOOL WINAPI __crt_dll_initialize()
{
    // Try to make the variable names unique, so that the variables 
    // do not even clash with macros.
    static BOOL volatile (__retval) = FALSE;
    static DWORD volatile (__lockThreadId) = 0xffffffff;
    DWORD volatile (__currentThreadId) = __USE_GLOBAL_NAMESPACE(GetCurrentThreadId)();
    int (__int_var)=0;
    
    // Take Lock; this is needed for multithreaded scenario. 
    // Additionally, the threads need to wait here to make sure that the dll 
    // is initialized when they get past this function.
    while ( __USE_GLOBAL_NAMESPACE(InterlockedExchange)( &(__lock_handle), 1) == 1 )
	{
        ++(__int_var);
        if ((__lockThreadId) == (__currentThreadId)) 
        {
            return TRUE;
        }
		__USE_GLOBAL_NAMESPACE(Sleep)( (__int_var)>1000?100:0 );

        // If you hang in this loop, this implies that your 
        // dllMainCRTStartup is hung on another thread. 
        // The most likely cause of this is a hang in one of your 
        // static constructors or destructors.
	}
    // Note: you do not really need any interlocked stuff here because the 
    // writes are always in the lock. Only reads are outside the lock.
    (__lockThreadId) = (__currentThreadId);
    __try {
        if ( (__terminated) == TRUE )
        {
            (__retval) = FALSE;
        }
        else if ( (__initialized) == FALSE )
        {
            (__retval) = (_DllMainCRTStartup)( ( HINSTANCE )( &__ImageBase ), DLL_PROCESS_ATTACH, 0 );
            (__initialized) = TRUE;
        }

    } __finally {
        // revert the __lockThreadId
        (__lockThreadId) = 0xffffffff;
        // Release Lock
       __USE_GLOBAL_NAMESPACE(InterlockedExchange)(&(__lock_handle),0);
    }
    return (__retval);
}

__inline BOOL WINAPI __crt_dll_terminate()
{
    static BOOL volatile (__retval) = TRUE;
    static DWORD volatile (__lockThreadId) = 0xffffffff;
    DWORD volatile (__currentThreadId) = __USE_GLOBAL_NAMESPACE(GetCurrentThreadId)();
    int (__int_var)=0;
    
    // Take Lock; this lock is needed to keep Terminate 
    // in sync with Initialize.
    while ( __USE_GLOBAL_NAMESPACE(InterlockedExchange)( &(__lock_handle), 1) == 1 )
	{
        ++(__int_var);
        if ((__lockThreadId) == (__currentThreadId)) 
        {
            return TRUE;
        }
		__USE_GLOBAL_NAMESPACE(Sleep)( (__int_var)>1000?100:0 );

        // If you hang in this loop, this implies that your 
        // dllMainCRTStartup is hung on another thread. The most likely 
        // cause of this is a hang in one of your static constructors 
        // or destructors.
    }
    // Note: you do not really need any interlocked stuff here because the 
    // writes are always in the lock. Only reads are outside the lock.
    (__lockThreadId) = (__currentThreadId);
    __try {
        if ( (__initialized) == FALSE )
        {
            (__retval) = FALSE;
        }
        else if ( (__terminated) == FALSE )
        {
            (__retval) = _DllMainCRTStartup( ( HINSTANCE )( &(__ImageBase) ), DLL_PROCESS_DETACH, 0 );
            (__terminated) = TRUE;
        }
    } __finally {
        // revert the __lockThreadId
        (__lockThreadId) = 0xffffffff;
        // Release Lock
       __USE_GLOBAL_NAMESPACE(InterlockedExchange)(&(__lock_handle),0);
    }
    return (__retval);
}

THAM KH?O

Đ? bi?t thêm thông tin, h?y b?m vào s? bài vi?t sau đ? xem bài vi?t trong Cơ s? Ki?n th?c Microsoft:
309694L?I: AppDomainUnloaded ngo?i l? khi b?n s? d?ng qu?n l? ph?n m? r?ng c?a các thành ph?n Visual C++

Thu?c tính

ID c?a bài: 814472 - L?n xem xét sau cùng: 28 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
T? khóa: 
kbcominterop kbmanaged kbdll kbijw kbprb kbmt KB814472 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:814472

Cung cấp Phản hồi

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com