Two Dlls, Same Namespace, Cast Problem

R

rob

I have two projects (dlltest, dll2) both creating a dll. The two dlls
define classes (dll1, dll2) within the same namespace (MyNamespace).
One of the dlls (dlltest) is using functionality of the other dll
(dll2). Also both dlls use the same enum (MyEnum) defined in a header
file (common.h). This header file is included in both dlls.

Now I have one function from the first dll (dlltest) return the return
argument from the second dll (dll2). The compiler then complains:

error C2440: 'return' : cannot convert 'MyNamespace::MyEnum' to
'MyNamespace::MyEnum'.

It seems that because the include file is included in both dlls MyEnum
is considered as two different enums even if they reside in the same
namespace. Is this correct? If so then how can it distinguish between
the two if they are called the same? If not then what is the problem.

In any case, what is the proper solution to this? Maybe I could combine
everything in one dll but the functionality of dll2 really can stand on
it's own feet so throwing dlltest into the dll2 does not seem proper.
Also in the actual project there are other dlls that can live
bythemselves but they have some common types. So I am really not sure
how to solve this problem (technically and conceptually). Any ideas are
welcome.

common.h
---------

#ifndef _COMMON_H
#define _COMMON_H
enum class MyEnum{
enum1,
enum2,
enum3
};
#endif

dll2
---
using namespace System;
namespace MyNamespace{
#include "../dlltest/common.h"

public ref class dll2{
public:
static MyEnum ReturnEnumDll2(){
return MyEnum::enum1;
}
};
}

dlltest
------
using namespace System;
#using <dll2.dll>
namespace MyNamespace {
#include "common.h"

public ref class dll1 {
MyEnum ReturnEnumDll1(){
return dll2::ReturnEnumDll2();
}
};
}

Regards,
Rob
 
T

Tamas Demjen

rob said:
error C2440: 'return' : cannot convert 'MyNamespace::MyEnum' to
'MyNamespace::MyEnum'.

It seems that because the include file is included in both dlls MyEnum
is considered as two different enums even if they reside in the same
namespace. Is this correct? If so then how can it distinguish between
the two if they are called the same? If not then what is the problem.

I don't think you should include managed declarations between assemblies
(DLLs). You should be doing #using instead or #include. Declare the enum
in one of the DLLs only. So #include from dll2, but #using from dlltest,
remove the #include from there. This, of course, requires that you make
MyEnum public:

public enum class MyEnum{
enum1,
enum2,
enum3
};

Tom
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top