我必须从C#中的DLL库访问一些函数。 我的第一步是创建一个包装类来处理它:
//Class TMDLLWrapper.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace TrueMarbleData
{
class TMDLLWrapper
{
[DllImport("TrueMarbleDLL.dll")]
public static extern int GetTileSize(out int width, out int height);
[DllImport("TrueMarbleDLL.dll")]
public static extern int GetNumTiles(int zoomLevel, out int numTilesX, out int numTilesY);
[DllImport("TrueMarbleDLL.dll")]
public static extern int GetTileImageAsRawJPG(int zoomLevel, int tileX, int tileY, out byte imageBuf, int bufSize, out int jpgSize);
}
}
然后,我创建了一个接口和一个类来访问包装器类'方法:
//Interface ITMDataController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
namespace TrueMarbleData
{
[ServiceContract]
public interface ITMDataController
{
[OperationContract]
int GetTileWidth();
[OperationContract]
int GetTileHeight();
[OperationContract]
int GetNumTilesAcross(int zoom);
[OperationContract]
int GetNumTilesDown(int zoom);
[OperationContract]
byte[] LoadTile(int zoom, int x, int y);
}
}
//Class TMDataControllerImpl.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using TrueMarbleData;
namespace TrueMarbleData
{
[ServiceBehavior(ConcurrencyMode=ConcurrencyMode.Multiple,
UseSynchronizationContext=false)]
internal class TMDataControllerImpl : ITMDataController
{
TMDLLWrapper obj = new TMDLLWrapper(); //Problem here: I cannot access
//wrapper class' methods
//Methods available: Equals,
//GetHashCode, GetType, ToString
public int GetTileWidth()
{
return 0;
}
public int GetTileHeight();
public int GetNumTilesAcross(int zoom);
public int GetNumTilesDown(int zoom);
public byte[] LoadTile(int zoom, int x, int y);
}
}
我需要访问Wrapper Class' TMDataControllerImpl类中的方法。但是,当我从TMDLLWrapper类创建一个对象时,我只能访问这些方法:Equals,GetHashCode,GetType,ToString。 这应该是一件容易的事,我还没弄清楚错误在哪里。 有人可以帮帮我吗?
答案 0 :(得分:0)
当您尝试以这种方式访问方法时:
TMDLLWrapper obj = new TMDLLWrapper();
您只能访问实例方法。所以你应该以静态方式使用静态方法:
TMDLLWrapper.GetTileSize(a, b);
答案 1 :(得分:0)
由于TMDLLWrapper
中的方法是静态的,因此您应该使用语法来访问静态方法:
TMDLLWrapper.GetTileSize(/* ... */);
您不需要创建TMDLLWrapper
的实例。此外,希望使其成为静态类:
static class TMDLLWrapper { /* ... */ }
答案 2 :(得分:0)
类为internal
。将包装类设为public:
public class TMDLLWrapper
{
...
}
然后,您将以静态方式访问它的方法:
TMDLLWrapper.GetNumTiles(...);