Tôi có một dự án C++ (studio trực quan 2010) bao gồm mã gốc và mã C++/cli. Tôi không thể biên dịch toàn bộ dự án với/clr, vì vậy tôi chỉ làm điều đó cho các tệp C++/cli tương ứng. Vấn đề của tôi là một tập tin header không thể được biên dịch với/clr, nhưng tôi muốn làm cho một số hàm C++/cli có thể tái sử dụng trong toàn bộ dự án và xác định nguyên mẫu phương thức trong một tệp tiêu đề để bao gồm nó trong mọi tệp mà tôi cần nó. Có giải pháp nào không? Tôi đã cố gắng để xác định một số nguyên mẫu phương pháp mã hỗn hợp trong một tập tin tiêu đề, nhưng/clr phải được bật cho rằng để biên dịch.C++/cli header header file
Dưới đây là ví dụ của tôi:
Test.h
#include <Windows.h>
#include <vector>
#include <string>
using std::vector;
using std::string;
#include <msclr/marshal.h>
#pragma managed
using namespace msclr::interop;
using namespace System;
using namespace System::IO;
using namespace System::Runtime::InteropServices;
public ref class Test
{
public:
int Foo();
};
Test.cpp
#include "Test.h"
int Test::Foo()
{
return 4;
}
Intellisense đang phàn nàn với sai sót trong Test.h như C++/cli phải được bật để sử dụng #using. Nhưng tôi nghĩ rằng điều này là không đáng kể và nó sẽ biên dịch anyway.
Compilation hủy bỏ với một Lỗi Linker (sry, tôi có Đức phiên bản VS)
Fehler 6 error LNK1255: Fehler bei Verknüpfung aufgrund von Metadatenfehlern.
Fehler 4 error LNK2022: Fehler bei Metadatenoperation (8013118D) : Duplizierte Typen (_PROPSHEETPAGEA) wurden gefunden, aber die Typenlayoutinformationen sind nicht konsistent: (0x02000198).
Fehler 5 error LNK2022: Fehler bei Metadatenoperation (8013118D) : Duplizierte Typen (_PROPSHEETPAGEW) wurden gefunden, aber die Typenlayoutinformationen sind nicht konsistent: (0x020001d1).
Tôi chắc chắn không có một lớp trùng lặp "Test" ở những nơi khác, vì vậy tôi không biết nơi mà các bản sao đến từ đâu. Thông tin typelayout là gì và tại sao chúng không nhất quán?
Bạn có thể biên dịch một phần dự án bằng/clr và một phần bằng cách nào? Và tại sao mã nguồn gốc của bạn không hoạt động với/clr? – svick
Một plugin của nó cho 3dsMax và biên soạn toàn bộ dự án với/clr doesnt work, tôi nhận được rất nhiều lỗi. Cách được khuyến cáo bởi Autodesk là biên dịch chỉ các phần mã C++/cli với/clr. Đối với mọi tệp .cpp bạn có thể đặt "Sử dụng thời gian chạy ngôn ngữ chung" trong thuộc tính. – Michbeckable
Bạn có thể đăng một ví dụ ngắn gọn về tệp tiêu đề và sử dụng tệp cpp không biên dịch được không? Ngoài ra, là tập tin tiêu đề đang được tiêu thụ bởi cả một/clr cpp và c/non-clr không? –