2011-06-24 35 views
5

Tôi đang phát triển các tệp DLL JNI trong Delphi 7. Các tệp kết quả sẽ là các tệp DLL 32 bit, không hoạt động trên máy ảo Java 64 bit.Liên kết 64 bit của một tệp đối tượng

Delphi 7 có khả năng tạo các tệp đối tượng c hoặc C++ đối tượng. Có thể tạo một DLL 64bit từ các tệp đối tượng này với một trình liên kết bên thứ ba không?

+0

Nếu bạn không ngại thay đổi cách mã delphi của bạn nói với mã Java, có lẽ bạn có thể tạo một giao diện mạng giữa chúng và đặt mã Delphi trong máy chủ REST của riêng nó, chạy như một quá trình CGI. Sau đó, bạn có thể có mã 32 bit nói chuyện với mã java 64 bit dễ dàng, bởi vì chúng nằm trong các quy trình riêng biệt và chỉ được kết nối bằng một ổ cắm. –

Trả lời

9

Trình biên dịch Delphi phát ra mã đối tượng 32 bit. Nó không quan trọng như thế nào bạn cắt nó, mã đó không thể được liên kết vào một mô-đun 64 bit.

Hiện tại, đặt cược tốt nhất của bạn là sử dụng FreePascal có thể tạo ra các tệp DLL 64 bit. Có một phiên bản 64 bit sắp tới của Delphi nhưng ngày phát hành của nó là không xác định.

Một tùy chọn khác là thực thi việc sử dụng phiên bản 32 bit của JVM, nếu có thể cho bạn.

+0

Tôi không loại bỏ ý tưởng vì giao diện STDCALL được sửa trong cả hai trường hợp. Tôi nghĩ rằng một lớp tương thích tối thiểu có thể tạo ra một đoạn 32 bit và một wrapper xung quanh các chức năng xuất khẩu. Nhưng đây chỉ là suy đoán. – vbence

+3

@vbence Bạn không thể chạy mã 32 bit trong quy trình 64 bit. –

+1

@vbence - Quy ước gọi thực sự khác trên Win32 và Win64. Tuy nhiên, bạn hoàn toàn có thể viết cầu nối giữa mã 32 bit và 64 bit (xem http://cc.embarcadero.com/item/27667). – PhiS

3

No. Mã 64 bit rất khác với mã 32 bit, ngoài việc chỉ sử dụng hướng dẫn 64 bit. MS giới thiệu các quy tắc chặt chẽ hơn trong việc truyền tham số, ngăn xếp dữ liệu và căn chỉnh, v.v. Thực sự không có cách nào để bao gồm mã 32 bit trong một DLL 64 bit (và do điều này bị cấm quá để gọi mã 32 bit từ 64 bit một, và viceversa, nhưng bằng cách sử dụng các kỹ thuật cụ thể). Bạn phải đợi trình biên dịch bit Delphi 64 bit (và hy vọng bản phát hành đầu tiên của nó là đủ tốt), hoặc tìm ở nơi khác. Delphi 7 là nhận được lỗi thời anyway.

+0

Cảm ơn! Tôi biết nó đã lỗi thời, nhưng tôi đang đăng ký một cách tiếp cận "nếu không bị hỏng không sửa chữa nó" liên quan đến thành phần này. – vbence

+2

@vbence Nếu bạn không muốn thay đổi mã Pascal, hãy sử dụng một JVM 32 bit –

Các vấn đề liên quan