Tôi có một ứng dụng kế thừa được viết bằng C, và tôi muốn dần dần di chuyển một số mã đến C#. Nhưng trước khi có thể viết lại mọi thứ tôi sẽ cần phải có ít thành phần được viết trong C# đầu tiên sẽ được sử dụng từ C.Làm thế nào để tái sử dụng một hội đồng .Net từ một ứng dụng C tinh khiết
Trả lời
Tôi giả định Lớp C# là lớp tĩnh. Bạn cần tạo một lớp interop trong C++/CLI trước khi bạn có thể sử dụng nó trong tinh khiết C. Tạo một lớp học C++/CLI để bọc lớp học C# của bạn. Khi việc đó được thực hiện, hãy sử dụng hàm xuất để xuất các hàm C cụ thể. C++/CLI sẽ quản lý interop thay cho bạn. Quy tắc của ngón tay cái là nếu bạn lớp/chức năng có bất kỳ CLI nó sẽ CLI. Vì vậy, các hàm bên ngoài của bạn chỉ nên trả về kiểu dữ liệu gốc.
extern "C" __declspec(dllexport) int MyFunc(long parm1);
Đây là bài viết giúp bạn bắt đầu. Nó chuyển đổi C++ thành C# nhưng quy trình được đảo ngược trong trường hợp của bạn. CodeProject Thật không may là không có thuận tiện đảo ngược PInvoke cho tinh khiết C.
Rất tiếc, tôi chưa bao giờ rời khỏi C# đến C. Nghe có vẻ như một dự án thú vị. Chúc may mắn!
Ok Nếu bạn chưa tìm ra, tôi có mẫu nhanh cho bạn.
C# CSLibrary.Math.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CSLibrary
{
static public class Math
{
static public int Add(int a, int b)
{
int c = a + b;
return c;
}
}
}
CPP/C++ Dự án CPPCLibrary.h (Biên soạn với C++/CLI Tùy chọn với phụ thuộc dự án)
#pragma once
using namespace System;
extern "C" __declspec(dllexport) int MathAdd(int a, int b)
{
return CSLibrary::Math::Add(a, b);
}
C Dự án CTest .c (Biên dịch thành Mã C)
#include "stdafx.h"
#pragma comment(lib, "../Debug/CPPCLILibrary.lib")
extern __declspec(dllimport) int MathAdd(int a, int b);
int _tmain(int argc, _TCHAR* argv[])
{
int answer = MathAdd(10, 32);
_tprintf(_T("%d\n"), answer);
return 0;
}
Tất cả các tệp đều có cùng giải pháp nhưng các dự án khác nhau. Tôi đã xác nhận điều này đã làm việc. Tôi hy vọng điều này sẽ giúp bất cứ ai đi qua nó.
Chúc mừng!
Nếu mã là C thuần khiết, bạn có thể đặt nó vào C++ trực quan dự án lắp ráp mà không gặp quá nhiều khó khăn. Từ đó, bạn sẽ có quyền truy cập vào một api .net thông thường.
- 1. Làm thế nào để tái sử dụng một ứng dụng tái sử dụng trong Django
- 2. Làm cách nào để gọi một hội đồng .NET từ C/C++?
- 3. Lấy ngày của một hội đồng .NET
- 4. Làm thế nào để tái sử dụng một ostringstream?
- 5. Có thể sử dụng các hội đồng WPF trong một ứng dụng web không?
- 6. Làm thế nào để dllexport một ++ Class C để sử dụng trong một C# ứng dụng
- 7. Khi liên kết một hội đồng quản trị .NET 2.0 từ một ứng dụng .NET 4.0, khung công tác nào được sử dụng?
- 8. Làm thế nào để sử dụng tinh khiết trong D 2.0
- 9. Làm thế nào để tham khảo một không gian tên từ một hội đồng cụ thể?
- 10. Arduino trong tinh khiết C
- 11. Làm thế nào để đếm số lượng các chủ đề đồng thời trong ứng dụng .NET?
- 12. Trích xuất XAML từ một hội đồng .Net
- 13. Làm thế nào để bạn lập trình (lại) ký một hội đồng .NET với tên mạnh?
- 14. Làm thế nào để bạn sử dụng RequireJS trong một ứng dụng .NET?
- 15. Làm thế nào để đánh giá một chuỗi các chức năng không tinh khiết trong Clojure?
- 16. làm thế nào để tôi tạo ra một nền tam giác với css tinh khiết
- 17. Trích xuất một Hội đồng .NET từ SQL Server 2005
- 18. Tải hội đồng WinRT từ .NET
- 19. Đang tải một hội đồng được nhắm mục tiêu cho .NET 4.5 trên miền ứng dụng .NET 4.0
- 20. Chạy "tinh khiết" JUnit 4 thử nghiệm sử dụng kiến
- 21. Làm cách nào để đọc thông tin chữ ký số từ một hội đồng .Net đã ký?
- 22. sử dụng hội đồng di sản trong ứng dụng kiểu metro
- 23. Làm cách nào tôi có thể tái chế một ứng dụng riêng của ứng dụng web .net?
- 24. ANSI-C tinh khiết: tạo mảng chung
- 25. Làm thế nào một trình biên dịch có thể áp dụng chức năng loại bỏ các hàm không tinh khiết?
- 26. Làm thế nào để nhúng WebKit vào ứng dụng C/C++/Win32 của tôi?
- 27. Làm thế nào để gọi một ứng dụng Android từ một ứng dụng android
- 28. Làm thế nào để tái sử dụng một lớp học trong sass mà không sử dụng một mixin?
- 29. Làm thế nào để sử dụng boost :: tinh thần để phân tích một chuỗi các từ vào một vector?
- 30. Tạo một lĩnh vực đầu vào sử dụng tinh khiết Javascript
Nếu tôi có thời gian tôi muốn tạo một bản trình diễn nhỏ. Điều này nghe có vẻ vui. –