2012-01-15 28 views
7

Tương đương ngôn ngữ D2 của __declspec (dllexport)Làm thế nào để xuất một biến từ một DLL khi biên dịch ngôn ngữ D2 với dmd?

Tôi có liên kết D2 DLL example code và chạy. Các chức năng xuất khẩu, cả trong không gian tên bị xáo trộn của dmd cũng như trong không gian tên "C" mang tính tiêu chuẩn, hoạt động giống như một sự quyến rũ. Nhưng tôi đang chạy vào vùng biển thám hiểm liên quan đến việc chia sẻ một (toàn cầu) int biến giữa DLL cũng như chương trình exe chính ... Tôi đã kiểm tra bảng biểu tượng DLL với depends22_x86 và trong khi tôi đã thực hiện một điểm bằng cách sử dụng xuất khẩu chỉ thị trước khi khai báo của Var, nó không hiển thị trong bảng của DLL, trong khi các hàm hoạt động. Có thể xuất Varibles để hiển thị trong một DLL với chuỗi công cụ Mars dmd kỹ thuật số không?

+3

Không bao giờ thử, nhưng hãy đảm bảo bạn sử dụng __gshared. – Trass3r

+1

Nhiều ngôn ngữ/trình biên dịch khác không hỗ trợ xuất các biến. Xuất khẩu biến là một điều giòn anyway, bởi vì nó không thành công trong nhiều tình huống (trì hoãn liên kết), nơi chức năng làm việc mà không có vấn đề. Tại sao bạn không thể viết hàm getter/setter cho biến của bạn? – 0xC0000022L

Trả lời

0

Là một workaround, nếu xuất khẩu hoặc nhập khẩu các biến toàn cục không làm việc, sau đó viết một hàm wrapper của mẫu

Type variable; 

extern(C) Type * getGlobalVariable() 
{ 
    return &variable; 
} 

nếu bạn muốn xuất từ ​​D đến C.

0

Có lẽ bạn có thể làm những gì Ralph Tandetzky nói nhưng trong một ctor module tĩnh. Bạn sẽ không phải gọi một cách rõ ràng bất kỳ chức năng nào, tất cả các biểu tượng sẽ được tải. Có lẽ __gshared sẽ được đánh giá cao, quá.

1

Đây là lỗi trong trình biên dịch (Bugzilla 10059). Mã sau đây sẽ hoạt động ngay bây giờ.

export __gshared int foo; 
Các vấn đề liên quan