请高手看看:显式调用动态链接库,出现“I/O error 105”错误!

superyangtze 2008-07-15 10:48:15
显式调用动态链接库,出现“I/O error 105”错误!

代码如下:

int (__stdcall* init_seg)(char *errmsg);
int (__stdcall* seg_sent)(wchar_t *pw, int len, char * outbuf, int buflen);

void CShidllDlg::OnButton1()
{
FILE *outFile;
wchar_t * pw = L"王建平你是个学生吧。";
char buf[256];
wchar_t wbuf[128];
HMODULE h = LoadLibrary("segtag.dll");
if (h == 0) exit(1);
init_seg = (int (__stdcall *)(char *errmsg))GetProcAddress(h, "init_seg");
seg_sent = (int (__stdcall *)(wchar_t *,int,char *,int))GetProcAddress(h, "seg_sent");
wcscpy(wbuf, pw);
init_seg(buf);
if (seg_sent(wbuf, wcslen(pw), buf, sizeof(buf)))
outFile=fopen("result.txt","wt");
fprintf(outFile,"王建平你是个学生吧。==>%s\n", buf);
FreeLibrary(h);
return ;
}

函数接口说明:
int init_seg(char *errmsg);
参数
无。

描述
初始化切分引擎。如果有错,会在errmsg中返回错误串。请保证传递至少256字节的缓冲区。

返回值
true:成功
false:失败


int seg_sent(wchar_t *pw, int len, char * textoutbuf, int buflen);
int segtag_1(wchar_t *pw, int len, SEGREC * segoutbuf, int segbuflen);
参数
pw 指向要切分的汉语文本。

len 指向文本的长度(以wchar为单位)。

textoutbuf 指向存放切分结果文本的缓冲区。

buflen 指明缓冲区长度(以字节为单位)。

segoutbuf 指向存放切分结果的缓冲区数组。

segbuflen 指明缓冲区数组的大小(以元素个数为单位)。


描述
切分一个汉语句子。


返回值
true:成功
false,失败。可能是缓冲区太小。



输出结果:王建平你是个学生吧。==>I/O error 105


如果写成以下形式,则可以编译运行。

#include "stdafx.h"
#include <windows.h>

int (__stdcall* init_seg)(char *errmsg);
int (__stdcall* seg_sent)(wchar_t *pw, int len, char * outbuf, int buflen);

int _tmain(int argc, _TCHAR* argv[])
{
wchar_t * pw = L"王建平你是个学生吧。";
char buf[256];
wchar_t wbuf[128];
HMODULE h = LoadLibrary("segtag.dll");
if (h == 0) exit(1);
init_seg = (int (__stdcall *)(char *errmsg))GetProcAddress(h, "init_seg");
seg_sent = (int (__stdcall *)(wchar_t *,int,char *,int))GetProcAddress(h, "seg_sent");
wcscpy(wbuf, pw);
init_seg(buf);
if (seg_sent(wbuf, wcslen(pw), buf, sizeof(buf)))
printf("王建平你是个学生吧。==>%s\n", buf);
FreeLibrary(h);
return 0;
}


请高手帮忙解答。谢谢。
...全文
1247 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
superyangtze 2008-07-20
  • 打赏
  • 举报
回复
用printf输出结果正常,就是用fprintf输出出现I/O错误的。

superyangtze 2008-07-20
  • 打赏
  • 举报
回复
我很坚持。期待解决。谢谢。
superyangtze 2008-07-20
  • 打赏
  • 举报
回复
这个dll只有接口,没有代码。
不好意思。
菜牛 2008-07-19
  • 打赏
  • 举报
回复
可能是函数中破坏指针了,把dll中的函数代码发出来。
superyangtze 2008-07-18
  • 打赏
  • 举报
回复
哪位兄弟留个Email给我,我把文件发来。请你帮我看看。非常感谢。
我的:superyangtze@hotmail.com
superyangtze 2008-07-18
  • 打赏
  • 举报
回复
回复12楼:

1。按你的办法修改,错误依旧。
2。

if (seg_sent(wbuf, wcslen(pw), buf, sizeof(buf)))
{//至少这里少了大括号 //这个大括号不少
outFile=fopen("result.txt","wt");
if(outFile) { //保护一下 //保护一下也不奏效
fprintf(outFile,"王建平你是个学生吧。==>%s\n", buf); //此行不在if语句内
fclose(outFile);
}
}
FreeLibrary(h);
return ;
3。 谢谢了。
superyangtze 2008-07-18
  • 打赏
  • 举报
回复
这个问题真的没有人能够回答出来吗?
请高手们不要潜水了。会憋坏的。谢谢。
oo_v_oo 2008-07-17
  • 打赏
  • 举报
回复

int (__stdcall* init_seg)(char *errmsg);
int (__stdcall* seg_sent)(wchar_t *pw, int len, char * outbuf, int buflen);

void CShidllDlg::OnButton1()
{
FILE *outFile;
wchar_t * pw = L"王建平你是个学生吧。";
char buf[256];
wchar_t wbuf[128];
HMODULE h = LoadLibrary("segtag.dll");
if (h == 0) exit(1);
init_seg = (int (__stdcall *)(char *errmsg))GetProcAddress(h, "init_seg");
seg_sent = (int (__stdcall *)(wchar_t *,int,char *,int))GetProcAddress(h, "seg_sent");
wcscpy(wbuf, pw);
init_seg(buf);
if (seg_sent(wbuf, wcslen(pw), buf, sizeof(buf)))
{//至少这里少了大括号
outFile=fopen("result.txt","wt");
if(outFile) { //保护一下
fprintf(outFile,"王建平你是个学生吧。==>%s\n", buf);
fclose(outFile);
}
}
FreeLibrary(h);
return ;
}
superyangtze 2008-07-17
  • 打赏
  • 举报
回复
再来顶一下。谢谢。
superyangtze 2008-07-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 Amuro1987218 的回复:]
晕.是在文件中显示的?

那把buf复制一份再写文件呢?
[/Quote]

字符数组用%s格式写入文件,为什么还要复制再写呢?没有道理啊。
superyangtze 2008-07-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gofqjyie 的回复:]
应该是文件的读写错误吧
[/Quote]

请问,问什么会有文件读写错误发生呢?谢谢。
mingguang7213 2008-07-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 Amuro1987218 的回复:]
晕.是在文件中显示的?

那把buf复制一份再写文件呢?
[/Quote]
长尾巴的悟空 2008-07-17
  • 打赏
  • 举报
回复
应该是文件的读写错误吧
Amuro1987218 2008-07-17
  • 打赏
  • 举报
回复
晕.是在文件中显示的?

那把buf复制一份再写文件呢?
superyangtze 2008-07-17
  • 打赏
  • 举报
回复
自己再来顶一下。希望高手帮忙看一下。感谢。
Amuro1987218 2008-07-16
  • 打赏
  • 举报
回复
outFile=fopen("result.txt","wt");
这个你换成C:\\1.txt试试
superyangtze 2008-07-16
  • 打赏
  • 举报
回复
Mackz兄,加上fclose()函数后,出现的错误信息一样。
谢谢。
菜牛 2008-07-16
  • 打赏
  • 举报
回复
fclose呢?
superyangtze 2008-07-16
  • 打赏
  • 举报
回复
Amuro1987218兄,按照你说的,换成C:\\1.txt后,文件中仍然显示“王建平你是个学生吧。==>I/O error 105
”。
感谢。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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