Hallo,
ich habe folgendes Problem:
Beim Map&Guide Mapserver wird ein COM-Object angeboten, dass Koordinaten-Transformationen machen kann. Dieses Object kann ich unter Delphi nutzen, allerdings will ich jetzt auch eine C#-Version basteln.
Das COM-Object ist folgendermaßen definiert:
<pre>
02637 // ITransform
02638
02670 [
02671 object,
02672 uuid(0A86A069-6322-4685-9B4C-41FD4BA476F7),
02673 helpstring("ITransform Interface"),
02674 pointer_default(unique)
02675 ]
02676 interface ITransform : IUnknown
02677 {
02689 HRESULT get_LogicalRect([out] RECT *pVal);
02690
02704 HRESULT put_LogicalRect([in] RECT newVal, [in] ENavigateFlags navFlags);
02705
02716 HRESULT get_PixelRect([out] RECT *pVal);
02717
02734 HRESULT put_PixelRect([in] RECT newVal, [in] ENavigateFlags navFlags);
02735
02748 HRESULT get_RotationAngle([out] double *pVal);
02749
02765 HRESULT put_RotationAngle([in] double newVal, [in] ENavigateFlags navFlags);
02766
02788 HRESULT Trans([in] ECoordFormat cfIn, [in] ECoordFormat cfOut, [in, out, size_is(clPoints)] POINT *rgPoints, [in] long clPoints);
02789
02819 HRESULT ShrinkTrans([in] ECoordFormat cfIn, [in] ECoordFormat cfOut, [in, out, size_is(*pclPoints)] POINT *rgPoints, [in, out] long *pclPoints);
02820 };
</pre>
Da ich nur das "Trans()" brauche, habe also folgende Sachen definiert:
<pre>
enum ECoordFormat
{
cfLOGICAL = 0,
cfPIXEL = 1,
cfSUPERKONFORM = 2,
cfMERCATOR = 3,
cfGEODECIMAL = 4,
cfGEOMINSEK = 5,
cfUTM = 6,
cfGK = 7,
cfUSAKONF = 8
};
enum ENavigateFlags
{
navCHANGE = 0,
navCHECK = 1,
navNOHISTORY = 2,
navNEWDC = 4,
navNOREFRESH = 8
};
struct tagPOINT
{
public int x;
public int y;
}
[ComImport, Guid("7182D86C-87E5-40DB-A1F3-0A02EC1E46C3")]
class Transform
{
}
// Declare ITransform as a COM Interface which
// derives from the IUnknown Interface.
[Guid("0A86A069-6322-4685-9B4C-41FD4BA476F7"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown )]
Interface ITransform // cannot list any base Interfaces here
{
void Trans( [In] ECoordFormat cfIn,
[In] ECoordFormat cfOut,
[In, Out] tagPOInT rgPoints,
[In] long clPoints);
//HRESULT ITransform::Trans (
// [in] ECoordFormat cfIn,
// [in] ECoordFormat cfOut,
// [in, out, size_is(clPoints)] POINT * rgPoints,
// [in] long clPoints
)
</pre>
wenn ich dann aber versuche das Object zu erzeugen, kommt ein "unbekannter" Fehler:
<pre>
Transform t = new Transform();
ITransform Transformer = (ITransform) t;
tagPOInT p;
p.x = 3544826;
p.y = 5797182;
Transformer.Trans(ECoordFormat.cfGK,ECoordFormat.c fMERCATOR,p,1);
</pre>
Kann mir jemand helfen?
ich habe folgendes Problem:
Beim Map&Guide Mapserver wird ein COM-Object angeboten, dass Koordinaten-Transformationen machen kann. Dieses Object kann ich unter Delphi nutzen, allerdings will ich jetzt auch eine C#-Version basteln.
Das COM-Object ist folgendermaßen definiert:
<pre>
02637 // ITransform
02638
02670 [
02671 object,
02672 uuid(0A86A069-6322-4685-9B4C-41FD4BA476F7),
02673 helpstring("ITransform Interface"),
02674 pointer_default(unique)
02675 ]
02676 interface ITransform : IUnknown
02677 {
02689 HRESULT get_LogicalRect([out] RECT *pVal);
02690
02704 HRESULT put_LogicalRect([in] RECT newVal, [in] ENavigateFlags navFlags);
02705
02716 HRESULT get_PixelRect([out] RECT *pVal);
02717
02734 HRESULT put_PixelRect([in] RECT newVal, [in] ENavigateFlags navFlags);
02735
02748 HRESULT get_RotationAngle([out] double *pVal);
02749
02765 HRESULT put_RotationAngle([in] double newVal, [in] ENavigateFlags navFlags);
02766
02788 HRESULT Trans([in] ECoordFormat cfIn, [in] ECoordFormat cfOut, [in, out, size_is(clPoints)] POINT *rgPoints, [in] long clPoints);
02789
02819 HRESULT ShrinkTrans([in] ECoordFormat cfIn, [in] ECoordFormat cfOut, [in, out, size_is(*pclPoints)] POINT *rgPoints, [in, out] long *pclPoints);
02820 };
</pre>
Da ich nur das "Trans()" brauche, habe also folgende Sachen definiert:
<pre>
enum ECoordFormat
{
cfLOGICAL = 0,
cfPIXEL = 1,
cfSUPERKONFORM = 2,
cfMERCATOR = 3,
cfGEODECIMAL = 4,
cfGEOMINSEK = 5,
cfUTM = 6,
cfGK = 7,
cfUSAKONF = 8
};
enum ENavigateFlags
{
navCHANGE = 0,
navCHECK = 1,
navNOHISTORY = 2,
navNEWDC = 4,
navNOREFRESH = 8
};
struct tagPOINT
{
public int x;
public int y;
}
[ComImport, Guid("7182D86C-87E5-40DB-A1F3-0A02EC1E46C3")]
class Transform
{
}
// Declare ITransform as a COM Interface which
// derives from the IUnknown Interface.
[Guid("0A86A069-6322-4685-9B4C-41FD4BA476F7"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown )]
Interface ITransform // cannot list any base Interfaces here
{
void Trans( [In] ECoordFormat cfIn,
[In] ECoordFormat cfOut,
[In, Out] tagPOInT rgPoints,
[In] long clPoints);
//HRESULT ITransform::Trans (
// [in] ECoordFormat cfIn,
// [in] ECoordFormat cfOut,
// [in, out, size_is(clPoints)] POINT * rgPoints,
// [in] long clPoints
)
</pre>
wenn ich dann aber versuche das Object zu erzeugen, kommt ein "unbekannter" Fehler:
<pre>
Transform t = new Transform();
ITransform Transformer = (ITransform) t;
tagPOInT p;
p.x = 3544826;
p.y = 5797182;
Transformer.Trans(ECoordFormat.cfGK,ECoordFormat.c fMERCATOR,p,1);
</pre>
Kann mir jemand helfen?
Comment