嗨chaps(和chappettes)
具有导出功能的常规C dll
int GetGroovyName(int grooovyId,char * pGroovyName,int bufSize,)
基本上你传给它一个ID(int),一个预先分配了内存的char *缓冲区,传入缓冲区的大小。
pGroovyName充满了一些文字。 (即它基于groovyID的查找)
问题是如何从c#中最好地调用它?
欢呼声
巴兹
答案 0 :(得分:3)
在C#方面,您将拥有:
[DllImport("MyLibrary")]
extern static int GetGroovyName(int grooovyId, StringBuilder pGroovyName, int bufSize);
你称之为:
StringBuilder sb = new StringBuilder (256);
int result = GetGroovyName (id, sb, sb.Capacity); // sb.Capacity == 256
答案 1 :(得分:1)
您可以在C#中使用DLLImport。
选中此http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx
来自MSDN的代码
using System;
using System.Runtime.InteropServices;
class Example
{
// Use DllImport to import the Win32 MessageBox function.
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
static void Main()
{
// Call the MessageBox function using platform invoke.
MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
}
}
答案 2 :(得分:0)
看看这个片段(理论上)如何展示它:
using System;
using System.Runtime.InteropServices;
using System.Text; // For StringBuilder
class Example
{
[DllImport("mylib.dll", CharSet = CharSet.Unicode)]
public static extern int GetGroovyName(int grooovyId, ref StringBuilder sbGroovyName, int bufSize,)
static void Main()
{
StringBuilder sbGroovyNm = new StringBuilder(256);
int nStatus = GetGroovyName(1, ref sbGroovyNm, 256);
if (nStatus == 0) Console.WriteLine("Got the name for id of 1. {0}", sbGroovyNm.ToString().Trim());
else Console.WriteLine("Fail!");
}
}
我将stringbuilder设置为256的最大容量,你可以定义更小的东西,假设它返回0成功,它打印出groovy id为1的字符串值,否则打印失败。 希望这可以帮助。 汤姆