急,请各位帮帮忙,DLL动态库函数引入问题?

FengLinXp 2003-08-21 10:10:28
我用到的是模拟语音卡自带的DJTTS.DLL,函数c原型是
int WINAPI DJTTS_StartPlayText( WORD wChnlNo,char *pText,int size,int IsFemale)

我在引入C#时写成
[DllImport("DJTTS.dll",CharSet=CharSet.Auto)]
public static extern short DJTTS_StartPlayText(short wChnlNo,[MarshalAs(UnmanagedType.LPTStr)]string pText,short size,short IsFemale);
调用:
string welcome = "1234";
Tc08aLib.DJTTS_StartPlayText(0,welcome,(short)welcome.Length,1);

或者写成
[DllImport("DJTTS.dll",CharSet=CharSet.Auto)]
public static extern short DJTTS_StartPlayText(short wChnlNo,[MarshalAs(UnmanagedType.LPTStr)]StringBuilder pText,short size,short IsFemale);
调用:
StringBuilder welcome = new StringBuilder("1234");
Tc08aLib.DJTTS_StartPlayText(0,welcome,(short)welcome.Length,1);
程序运行没有提示错误,但函数运行没有效果,放不出声音

...全文
42 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
FengLinXp 2003-09-13
  • 打赏
  • 举报
回复
另外比较重要的一点,这个函数是单字节的
所以 VC++下 LPTSTR welcome = "语音测试"; 正确
LPSTR welcome = "语音测试"; 也同样正确
Knight94 2003-09-12
  • 打赏
  • 举报
回复
你看看调用时,传进的字符串是什么,写一日志看看。
FengLinXp 2003-09-10
  • 打赏
  • 举报
回复
TO: qqchen79(知秋一叶 [MS MVP])

这种方法我也试过了,不行
qqchen79 2003-09-09
  • 打赏
  • 举报
回复
[DllImport("DJTTS.dll",CharSet=CharSet.Auto)]
public static extern int DJTTS_StartPlayText(short wChnlNo, string pText, int size, int IsFemale);
FengLinXp 2003-09-09
  • 打赏
  • 举报
回复
上面的方法我都试了,不行

下面是在VC++6下的调用代码,这段代码运行时是正常的

LPTSTR welcome = "语音测试";
DJTTS_StartPlayText(0,welcome,strlen(welcome),1);
qqchen79 2003-08-23
  • 打赏
  • 举报
回复
[DllImport("DJTTS.dll",CharSet=CharSet.Ansi)]
public static extern int DJTTS_StartPlayText(short wChnlNo,[MarshalAs(UnmanagedType.LPStr)]string pText, int size, int IsFemale);
Knight94 2003-08-22
  • 打赏
  • 举报
回复
我的意思是:你有用C调用此Dll的代码吗?或者其他编程工具?
Knight94 2003-08-21
  • 打赏
  • 举报
回复
Try this:
[DllImport("DJTTS.dll",CharSet=CharSet.Auto)]
public static extern short DJTTS_StartPlayText(short wChnlNo,StringBuilder pText,short size,short IsFemale);
FengLinXp 2003-08-21
  • 打赏
  • 举报
回复
??
FengLinXp 2003-08-21
  • 打赏
  • 举报
回复
有没有高手给看一下
qimini 2003-08-21
  • 打赏
  • 举报
回复
Mark
FengLinXp 2003-08-21
  • 打赏
  • 举报
回复
To qimini(循序渐进)
兄弟们真是倾力相助了

你写的两种方法都试过了还是不行?

怎么办啊?
qimini 2003-08-21
  • 打赏
  • 举报
回复
VS2003 Pass:

StringBuilder welcome=new StringBuilder("XYZ");
Tc08aLib.DJTTS_StartPlayText(0,welcome[0],(short)welcome.Length,1);
qimini 2003-08-21
  • 打赏
  • 举报
回复
Try also(not pass in vs2003):

StringBuilder welcome=new StringBuilder("XYZ");
Tc08aLib.DJTTS_StartPlayText(0,welcome.Chars[0],(short)welcome.Length,1);
qimini 2003-08-21
  • 打赏
  • 举报
回复
String welcome="XYZ";
Tc08aLib.DJTTS_StartPlayText(0,welcome.ToCharArray()[0],(short)welcome.Length,1);
FengLinXp 2003-08-21
  • 打赏
  • 举报
回复
To Knight94(愚翁) 先谢谢

你能列出用其他方式调用过程吗?

我不太明白你这个问题的意思?两种调用我都写上了啊
FengLinXp 2003-08-21
  • 打赏
  • 举报
回复
To qimini(循序渐进)

我已看到你写的代码了,但没有调用代码?

BTW,what is wChnlNo?
wChnlNo是一个通道号short型的,不用考虑它
FengLinXp 2003-08-21
  • 打赏
  • 举报
回复
To qimini(循序渐进)

你能不能根据我前面写的帮我写出实际的代码,先谢过
qimini 2003-08-21
  • 打赏
  • 举报
回复
[Out, MarshalAs(UnmanagedType.TBStr)] out char pText

You can refer to MSDN on the UnmanagedType and the use of [in] [out] paramenter's
modifier.Hope it would help you.
Knight94 2003-08-21
  • 打赏
  • 举报
回复
你能列出用其他方式调用过程吗?
加载更多回复(2)

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧