Введите видимость для заголовка Совместно используйте файл заголовка, совместно используемый собственными и управляемыми клиентами

У меня есть файл заголовка, который включен как в собственный файл cpp, так и в управляемый файл cpp (скомпилированный с помощью /clr). Он включает только собственные типы, но я хочу указать, что собственные типы видны вне сборки
(см. http://msdn.microsoft.com/en-us/library/4dffacbw(VS.80).aspx).

По сути, я хочу:

public class NativeClass  // The public makes this visible outside the assembly.
{

};

Если я включу этот код из собственного cpp, я получу следующую ошибку:

error C3381: 'NativeClass' : assembly access specifiers are only available in code compiled with a /clr option

Попытка решения:

В настоящее время я использую решение для препроцессора, которое вызывает общедоступность при компиляции с управляемым клиентом, но не отображается для собственного клиента:

#ifdef __cplusplus_cli
#define CLR_ASSEMBLY_ACCESS_SPECIFIER__Public public
#else
#define CLR_ASSEMBLY_ACCESS_SPECIFIER__Public 
#endif 

CLR_ASSEMBLY_ACCESS_SPECIFIER__Public
class NativeClass      
{

};

Вопрос:

Является ли это подходящим способом для достижения этого или есть лучший способ?


person Matt Smith    schedule 08.11.2010    source источник


Ответы (1)


Вы пробовали прагму make_public, указанную на странице MSDN, на которую вы ссылались?

В противном случае решение, которое у вас есть, совершенно верно. Мне любопытно узнать, почему вы хотите экспортировать собственные типы из сборки CLR.

person Ben Voigt    schedule 08.11.2010
comment
Я могу использовать make_public, но, похоже, это больше для решения проблемы, когда вы не можете изменить рассматриваемый заголовочный файл. Поскольку я владею заголовочным файлом, я хотел сделать его общедоступным. - person Matt Smith; 08.11.2010
comment
Я хочу сделать видимым тип Native, чтобы такой метод, как ManagedClass ^ GetManagedFromNative(const NativeClass & native), был виден другой сборке. Если я не сделаю NativeClass общедоступным, вызов метода GetManagedFromNative вызовет Error C3767 'function' candidate function(s) not accessible. msdn.microsoft.com/en-us/library/19dh8yat (VS.80).aspx. - person Matt Smith; 08.11.2010