あなたがC#の.NETアプリに自分のアンマネージドDLLをインポートする必要があります。私の例は構造体へのポインタを返しますが、あなたのアプリケーションに必要な他の戻り値の型を提供することができます。 dumpbin.exe/EXPORTSを使用して、関数/ EntryPoint名全体をdllから取得してください。ここに私のクラス全体がある:
using System;
using System.Runtime.InteropServices;
namespace aviationLib
{
public struct MAGtype_GeoMagneticElements
{
public double Decl; /* 1. Angle between the magnetic field vector and true north, positive east*/
public double Incl; /*2. Angle between the magnetic field vector and the horizontal plane, positive down*/
public double F; /*3. Magnetic Field Strength*/
public double H; /*4. Horizontal Magnetic Field Strength*/
public double X; /*5. Northern component of the magnetic field vector*/
public double Y; /*6. Eastern component of the magnetic field vector*/
public double Z; /*7. Downward component of the magnetic field vector*/
public double GV; /*8. The Grid Variation*/
public double Decldot; /*9. Yearly Rate of change in declination*/
public double Incldot; /*10. Yearly Rate of change in inclination*/
public double Fdot; /*11. Yearly rate of change in Magnetic field strength*/
public double Hdot; /*12. Yearly rate of change in horizontal field strength*/
public double Xdot; /*13. Yearly rate of change in the northern component*/
public double Ydot; /*14. Yearly rate of change in the eastern component*/
public double Zdot; /*15. Yearly rate of change in the downward component*/
public double GVdot; /*16. Yearly rate of change in grid variation*/
};
public class Declination
{
[DllImport("wmm.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode, EntryPoint = "[email protected]@[email protected]@[email protected]")]
public static extern IntPtr GeoMagneticElements(float sdate, int igdgc, int units, float alt, float latitude, float longitude);
public MAGtype_GeoMagneticElements e;
public MAGtype_GeoMagneticElements MagDeclination(float decimalLat, float decimalLon)
{
try
{
String d = DateTime.Now.Year.ToString("D4") + '.' + DateTime.Now.Day.ToString("D1");
IntPtr pnt = GeoMagneticElements((float)Convert.ToDouble(d), 1, 3, 3000.0f, decimalLat, decimalLon);
e = Marshal.PtrToStructure<MAGtype_GeoMagneticElements>(pnt);
}
catch (System.EntryPointNotFoundException se)
{
Console.WriteLine(se.Message);
}
return e;
}
}
}
ワード設定は、DLLは、32ビット、その後.NETが同様である必要がありますされるので、もし、管理対象および管理対象外の両方で同じにする必要があります。
コンテキストが不十分です。 gcroot <>またはMarshal :: GetFunctionPointerForDelegate()を使用します。 –