Làm th? nào đ? t?o ra 32-bit chuy?n nh?p thư vi?n mà không có.OBJs ho?c ngu?n

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 131313
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Bài vi?t này gi?i thích làm th? nào đ? t?o m?t thư vi?n nh?p kh?u đư?c đưa ra m?t.DLL cho mà b?n đ? không có ngu?n m? ho?c đ?i tư?ng module. Có là không có ti?n ích 32-bit đi?u đó có th? t?o ra m?t thư vi?n chuy?n nh?p t? m?t.DLL, là có v?i 16-bit các phiên b?n c?a Visual C++.

LƯU ?: Phương pháp này không th? làm vi?c v?i DLLs đư?c t?o ra v?i công c? phát tri?n không ph?i c?a Microsoft.

THÔNG TIN THÊM

B?nh thư?ng, khi xây d?ng m?t.DLL ho?c b?t k? m?c tiêu xu?t kh?u d? li?u ho?c ch?c năng kho?n m?c, m?t chuy?n nh?p thư vi?n (và t?p tin xu?t kh?u) đư?c t?o ra như m?t ph?n c?a các liên k?t quá tr?nh. Nhưng trong trư?ng h?p c?a m?t bên th? ba.DLL không tàu v?i m?t thư vi?n nh?p kh?u, b?n có th? c?n ph?i t?o ra m?t thư vi?n chuy?n nh?p theo th? t? s? d?ng các.DLL thành công b?ng cách s? d?ng th?i gian t?i liên k?t năng đ?ng. M?t, nh?p kh?u thư vi?n là không c?n thi?t cho th?i gian ch?y năng đ?ng liên k?t.

Có hai cách đ? t?o ra m?t thư vi?n nh?p kh?u đư?c đưa ra m?t.DLL:
  • T?o m?t.DEF t?p tin đ? s? d?ng v?i LIB /DEF: l?nh.
  • Bài ra ch?c năng, và s? d?ng các.OBJ t?p tin t?o ra đ? b?t chư?c các xu?t nh?p kh?u các m?i quan h?. Sau đó s? d?ng LIB /DEF: l?nh đ? t?o ra chuy?n nh?p thư vi?n.

Vi?c t?o ra m?t.DEF t?p

Th?i gian ch? có b?n có th? s? d?ng m?t.DEF t?p tin đ? t?o ra m?t thư vi?n chuy?n nh?p t? m?t .DLL mà b?n không có các ngu?n m? ho?c đ?i tư?ng module là n?u các .DLL xu?t kh?u ch?c năng thông qua m?t giao di?n C. C? th?, các ch?c năng c?n đ? đư?c khai báo đ? s? d?ng công ư?c g?i C. Đi?u này đư?c xác đ?nh b?i các thu?c tính _cdecl, thư?ng đư?c s? d?ng trong các m?u th? nghi?m cho các ch?c năng. Chú ý N?u không có thu?c tính đư?c ch? đ?nh, _cdecl là m?c đ?nh khi /Gz (_stdcall là m?c đ?nh) ho?c /Gr (_fastcall là m?c đ?nh) không đư?c ch? đ?nh trên các CL command line. L? do cho s? h?n ch? này d?a trên m?t gi? đ?nh đư?c th?c hi?n b?i ti?n ích LIB mà t?t c? các tên đư?c xu?t kh?u t? đ?ng mà không có m?t g?ch dư?i hàng đ?u. Đi?u này ch? đúng cho _cdecl ch?c năng tên.

Đưa ra m?t.DLL v?i ch?c năng xu?t kh?u thông qua m?t giao di?n C, b?n có th? t?o ra m?t chuy?n nh?p thư vi?n b?ng cách làm theo các bư?c sau:
  1. S? d?ng DUMPBIN /EXPORTS <.dll file="" name=""> đ? có đư?c danh sách xu?t kh?u bi?u tư?ng cho các.DLL trong câu h?i. Các bi?u tư?ng xu?t hi?n trong "tên" c?t c?a b?ng có tiêu đ? là "t? g?i ? tên." </.dll>
  2. T?o m?t.DEF t?p tin có ch?a m?t ph?n xu?t kh?u v?i tên c?a các ch?c năng đư?c li?t kê trong c?t "tên" đ?u ra DUMPBIN.
  3. Cho _cdecl ch?c năng, bi?u tư?ng s? xu?t hi?n c?ng gi?ng như nó mu?n khi đư?c s? d?ng trong chương tr?nh g?i đi?n tho?i. Ch? c?n đ?t bi?u tư?ng này trong ph?n xu?t kh?u c?a các.DEF t?p.
  4. S? d?ng các LIB /DEF:<.def file="" name=""> đ? t?o ra các thư vi?n nh?p kh?u và xu?t kh?u t?p tin. S? có tên cơ s? c?a thư vi?n chuy?n nh?p tên cơ s? c?a các .DEF t?p. S? d?ng/ra: đ? ki?m soát đ?u ra tên thư vi?n. </.def>

Stubbing ra ch?c năng

Cho xu?t kh?u các ch?c năng s? d?ng công ư?c g?i khác hơn C, các t?nh h?nh là ph?c t?p hơn m?t chút. Đi?u này đ?c bi?t đúng khi b?n xem xét các ch?c năng C++ và ph?c t?p hơn lư?c đ? trang trí tên tham gia. S? d?ng phương pháp này, b?n ph?i ít nh?t có tiêu đ? t?p tin mà mô t? các.DLL giao di?n.

Đ? t?o ra ch?c năng stubbed t? nguyên m?u trong m?t t?p tin tiêu đ?:
  1. Khi "__declspec(dllimport)" đư?c s? d?ng trong m?t m?u th? nghi?m ho?c tuyên b?, thay đ?i nó đ? "__declspec(dllexport)."
  2. Cho các ch?c năng mà không tr? v? m?t giá tr?, cho ch?c năng c trong c m? ngu?n, và cho các ch?c năng c b?ng C++ ngu?n m? (đư?c s? d?ng v?i 'extern "C" ' xây d?ng), thay th? d?u ch?m ph?y ch?m d?t các m?u th? nghi?m ch?c năng v?i m?t c?p phù h?p nh?n ni?ng răng ("{}").
  3. Cho các ch?c năng C++ (toàn c?u ho?c thành viên) mà tr? v? m?t giá tr?, b?n ph?i t?o ra m?t cơ th? gi? cho các ch?c năng, và tr? v? m?t giá tr? gi? c?a các đúng lo?i. (Không có m?t tuyên b? tr? l?i trong ch?c năng là b?t h?p pháp.) Đi?u này đi cho ch?c năng thành viên l?p, là t?t. H?y nh? r?ng các m?c đích c?a th? t?c này là đ? l?a các ti?n ích LIB vào t?o thư vi?n chính xác nh?p kh?u, do đó, các cơ quan gi? không có hi?u l?c.
  4. C++ l?p, b?n có th? bài trong ch?c năng thành viên b?ng cách s? d?ng các chi?c nguyên m?u trong tuyên b? l?p, mi?n là b?n vô hi?u hóa ch?c năng inlining khi b?n biên d?ch.
  5. Đ?i s? ch?c năng thư?ng ch? đư?c xác đ?nh b?i lo?i trong m?t t?p tin tiêu đ?. Ví d?, Geta(int). M?t đ?nh danh gi? đ?i s? ph?i đư?c xác đ?nh khi thêm cơ quan ch?c năng gi? Geta(int x). N?u không l?i C2055 đư?c t?o ra.

Ví d?

N?u tiêu đ? t?p tin mà mô t? MYDLL.DLL trông gi?ng như:
// mydll.H

extern "C" __declspec(dllimport) void _stdcall Function(void);

class __declspec(dllimport) CMyClass {
     int a;
     long b;
public:
     int Geta(int);
     long Getb();
     CMyClass();
};
				
T?p ngu?n gi? b?n s? d?ng đ? xây d?ng thư vi?n chuy?n nh?p nên h?nh như:
 // mydll.CPP

 extern "C" __declspec(dllexport) void _stdcall Function(void) {}

 class __declspec(dllexport) CMyClass {
      int a;
      long b;
 public:
      int Geta(int x) {return 111;}
      long Getb() {return 111;}
      CMyClass() {}
 };
				
M?t khi các ch?c năng đư?c stubbed, t?t c? b?n c?n làm là biên d?ch các ngu?n t?p tin vào m?t.OBJ t?p:
CL /c installer.bat/c /Ob0 mydll.CPP
Lưu ?: Vô hi?u hoá ch?c năng inlining c?n thi?t đ? bu?c các th? h? c?a các bi?u tư?ng cho các ch?c năng đư?c đ?nh ngh?a trong CMyClass. N?u ch?c năng inlining Kích ho?t, tr?nh biên d?ch s? thông báo r?ng không có không có tham chi?u đ?n các ch?c năng thành viên vào ph?ng b?nh d?ch, do đó, nó s? lo?i b? ch?c năng các cơ quan. Xem các cu?c th?o lu?n v? vi?c m? r?ng ch?c năng n?i tuy?n theo t?i ưu hóa trong tài li?u tham kh?o Visual c + + CL Command line.

M?t khi b?n đ? có.OBJ tác ph?m, b?n có th? s? d?ng LIB /DEF: đ? t?o ra chuy?n nh?p thư vi?n (.LIB) và t?p tin xu?t kh?u (.EXP):
LIB /DEF: mydll.OBJ
Đ? bi?t thêm thông tin v? l?nh LIB, tham kh?o "LIB tham kh?o" trong các Visual C++ sách tr?c tuy?n.

Ngoài ra, xem bài vi?t sau trong cơ s? ki?n th?c Microsoft:
140485 Xu?t kh?u PASCAL gi?ng như các bi?u tư?ng trong 32-bit DLLs

Thu?c tính

ID c?a bài: 131313 - L?n xem xét sau cùng: 17 Tháng Tám 2011 - Xem xét l?i: 2.0
T? khóa: 
kb3rdparty kbcode kbhowto kbmt KB131313 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:131313
Khước từ Nội dung trong Cơ sở Kiến thức Không còn được hỗ trợ
Bài vi?t này nói v? các s?n ph?m mà Microsoft không c?n h? tr? n?a. Do đó, bài vi?t này đư?c cung c?p "nguyên b?n" và s? không đư?c c?p nh?t.

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