作者DahliaX44 (豆乳机)
看板C_Sharp
标题[问题] C#中DllImport 函数呼叫
时间Mon Jul 22 11:55:41 2013
向大家请教一些问题,
其实我还是不太了解要如何才能让同一个function在多个.cs中被呼叫,
是只要using进来可以吗?还是namespace要相同才可以?
情况是这样的,手上拿到对方给的dll档,
在同一个专案中另开了一个imitatePacket.cs和Form1.cs,
在imitatePacket.cs中将此dll import进来,
imitatePacket.cs程式码如下:
using System.Runtime.InteropServices;
namespace imitatePacket
{
public class imPacket
{
[DllImport("Bus.dll", EntryPoint = "bus_GetNumDevices",
CallingConvention = CallingConvention.StdCall)]
public static extern BUS_STATUS Bus_GetDevices(ref uint numofDevices,
ushort vid, ushort pid);
public static BUS_STATUS Result = BUS_STATUS.BUS_DEVICE_ACCESS_ERROR;
public static bool API_GetDevices(ushort vid, ushort pid)
{
uint numDevices = 0;
Result = bus_GetDevices(ref numDevices, vid, pid);
if (Result == BUS_STATUS.BUS_SUCCESS)
{
return true;
}
else
{
return false;
}
}
}
}
=================================================
接下来要在Form1.cs中呼叫在imitatePeckte.cs中dll import进来的function,
这时候先加入using imitatePacket;(??)
但在Form1.cs中呼叫imitatePacket.cs中的class imPacket中的成员API_GetDevices依然
是出现错误的讯息。
Form1.cs的程式码如下
using imitatePacket;
namespace formosa
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
ushort uvid=4292, upid=60048;
imPacket.API_GetDevices(uvid, upid);//未能成功呼叫
}
}
======================================
请问大家我是在哪个地方做错或是没有注意到呢?
是要把imitatePacket.cs中的namespace改成跟Form1.cs一样的formosa呢?
还是只要在Form1.cs中加入using imitatePacket;才对呢?
试过上面两种方法还是产生错误。
或是有其它的地方做错,也请大家指教一下,谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.72.229.163
1F:推 TeemingVoid:步骤看起来没问题,我推测问题还是在DllImport的宣告 07/22 18:10
2F:→ TeemingVoid:这也是这类问题最常见的状况。 07/22 18:10
3F:→ TeemingVoid:如果你Build专案时没有出现错误讯息,等到呼叫时才出 07/22 18:11
4F:→ TeemingVoid:现错误,就印证我的推测。 07/22 18:11
5F:→ TeemingVoid:如果还是怀疑少了什麽步骤,先将全部的程式写在Form1 07/22 18:12
6F:→ TeemingVoid:如果还是怀疑少了什麽步骤,建议先将全部的程式写在 07/22 18:13
7F:→ TeemingVoid:Form1那边,确定可行後,再Refactor出来。 07/22 18:14