作者howshow (好笑)
看板C_Sharp
标题[问题] C# 引用 C 开发的DLL档宣告方式
时间Tue Oct 28 18:02:40 2014
大家好
最近在写一些sample code
目前要在C#(VC2005)去引用在C(VC2005)环境下开发的DLL档
首先要读取一个名为Text.txt的档案,正确回传err =0, 错误回传 非0 值
在C下的函数原型
I32 PostionData_F64(const wchar_t* FileName,U32* PosCount,POS_DATA * PosArray);
宣告:
I32 error = 0;
unsigned long cnt = 0; //cnt 为资料笔数
POS_DATA* PSdata;//资料结构
typedef struct _POS_DATA
{
U32 opt;
F64 A;
F64 B;
}
POS_DATA, *PPOS_DATA;
static const wchar_t filet[] = L"Text.txt";//此text.txt为要读取之档案名称
然後程式开始
err = PostionData_F64( filei, &cnt, PSdata );
================= 以下为C#的宣告 ===========
[DllImport("ABCDE.dll")]
public static extern Int32 PosData_F64(string FileName,ref System.UInt32
cnt, ref POS_DATA PosArray);
static string filet = "Text.txt";
Int32 err = 1;
UInt32 cnt = 0;
POS_DATA PSdata = new POS_DATA();
程式开始
err = ADCNC2.PosData2_FileLoad_F64(filet, ref cnt, ref PSdata);
结果回传错误代码,从代码可推测的确有call 到 DLL的function
但可能是档案名称不对或是路径不对,确认过後应该不是路径问题
会不会是从C的档案名称宣告
static const wchar_t filet[] = L"Text.txt";
转成C#的语法
static string filet = "Text.txt";
这样就不对了呢~~~
还请各位多多指教
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 210.59.165.169
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1414490563.A.2BA.html
1F:推 GoalBased: 朝\0 最後一个字元 试试看? 还是wchar 和 char 10/28 18:16
2F:→ GoalBased: 不过印象中 wchar 和 char好像没差 10/28 18:16
3F:→ howshow: 请问朝 \0 最後一个字元试试 是指什麽意思? 10/28 18:33
4F:→ GoalBased: 就是..字串结尾是\0 ,可是你的字元阵列是这样吗 10/28 18:43
5F:→ GoalBased: 大一过後就没碰C了阿..不过上次有人问我类似 10/28 18:43
6F:→ GoalBased: 问题也是这样解决的 10/28 18:43
7F:推 GoalBased: 或者你C# 写一个 char[8] 里面塞你的档名看看 10/28 18:45
8F:推 GoalBased: 或是DLL丢过来我帮你测XD 10/28 18:47
9F:→ sosokill: 你要不要试试看档名直接用绝对路径+档名? 10/28 21:54
10F:→ howshow: 绝对路径的方式试过了无效 ~~ 10/29 08:57
11F:→ howshow: 在dllimport 加上 10/30 14:37
12F:→ howshow: [MarshalAsAttribute(UnmanagedType.LPWStr)] 10/30 14:37