Tôi đang cố gắng tìm cách thêm mã để tạo các hàm được tạo. Tôi đã sử dụng các kiểu chữ để mở rộng các lớp, nhưng không thể tìm thấy bất kỳ thứ gì trong tài liệu về việc mở rộng các hàm cụ thể.Thêm mã vào lớp được tạo tự động trong SWIG
Với giao diện uống một lân tập tin sau đây:
%module Test
%{
#include "example.h"
%}
%typemap(cscode) Example %{
bool 64bit = SizeOf(typeof(System.IntPtr)) == 8;
static string Path = 64bit ? "/...Path to 64 bit dll.../" :
"/...Path to 32 bit dll.../";
%}
%include "example.h"
tôi nhận được đoạn mã sau C#:
public class MyClass : global::System.IDisposable {
...
bool 64bit = SizeOf(typeof(System.IntPtr)) == 8;
static string Path = 64bit ? "/...Path to 64 bit dll.../" :
"/...Path to 32 bit dll.../";
...
public static SomeObject Process(...) { // Function defined in example.h
<- I would like to add some code here.
SomeObject ret = new SomeObject(...);
}
...
}
Tôi muốn thêm một số mã để quá trình chức năng, mã này là một lời kêu gọi SetDllDirectory(Path)
tải dll chính xác tùy thuộc vào loại nền tảng. Điều này cần xảy ra bên trong cuộc gọi Process()
.
Bất kỳ trợ giúp nào được đánh giá cao!
Không bao giờ sử dụng swig (và dựa trên những gì tôi vừa googled) có vẻ như bạn muốn tiêm mã C# cụ thể ('SetDllDirectory()') trong khi dịch từ tệp nguồn C++ từ trước. Nếu đó là đúng, sau đó tôi nghĩ rằng bạn phải sắp xếp lại mã C + + của bạn để phù hợp với tiêm đó. Tạo một hàm stub virtual function trong 'Process()' C++ code mà sau này bạn có thể ghi đè khi bạn đang ở trong C# cõi. –
có thể trùng lặp của [Có thể thêm mã vào một phương thức hiện có khi sử dụng Swig để xây dựng trình bao bọc C# cho mã C++ không?] (Http://stackoverflow.com/questions/11286913/is-it-possible-to-add -code-to-an-existing-method-khi-sử dụng-swig-to-build-ac-sh) – cdiggins
@PeterM Đó là kiểu tiếp cận mà tôi đã nghĩ đến, nhưng không thể tìm ra cách để thực sự làm cho nó hoạt động . Flexo đã đưa ra một cách khác để chèn mã C# trực tiếp mà tôi sẽ thử. –