各位大大来帮帮忙啊。受不鸟了。dll这么难吗。
我做个一个dll文件功能是
VImportExcel.dll
1.bool CreateAndOpenExcel(AnsiString FieldName)
功能: 生成操作EXCEL对象,并打开EXCEL文件(后台打开,不显示)
若传入的FieldName为空,则显示[打开文件]之对话框,让用户选择文件并打印
2.AnsiString __export GetValue(unsigned Row, unsigned Col)
功能:读取Row 行Col列的数据并返回
3.void CloseAndDeleteExcel()
功能:调用结束,关闭EXCEL对象并清理内存
当我试用这个dll时,运行成功,也读出了×行×列的值,可是我结束程序时报错,如上图,真心上不起。
#pragma package(smart_init)
#pragma resource "*.dfm"
extern "C" __declspec(dllexport) __stdcall bool CreateAndOpenExcel(Variant&,AnsiString);
extern "C" __declspec(dllexport) __stdcall AnsiString GetValue(Variant&,unsigned, unsigned);
extern "C" __declspec(dllexport) __stdcall void CloseAndDeleteExcel(Variant&);
TForm1 *Form1;
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------
void __fastcall TForm1::btn1Click(TObject *Sender)
{
Variant ex;
CreateAndOpenExcel(ex,"c:\\test\\1.xls");
AnsiString s=GetValue(ex,1,1);
ShowMessage(s);
CloseAndDeleteExcel(ex);
}
Excel 结束程序出错 dll olefunction variant
[解决办法]
看起来工作正常,部分代码需要改进一下:
1. CreateAndOpenExcel第一个参数,由于要返回Variant对象,所以可以用Variant &类型,对于GetValue和CloseAndDeleteExcel函数来说就没有必要了,直接定义成Variant就行了。
2. EXE中对于静态调用DLL时函数的声明,需要用__declspec(dllimport)
如果方便的话,把你的测试工程和测试用的Excel文件压缩,发到我信箱,帮你看看。
cbfans at 163 dot com