我正在研究一个DLL,它将使用_stdcall调用对话从另一种语言(因此没有导入库和包括dll的头文件)中使用.问题是VC++似乎总是对其导出的符号进行一些名称修饰.我见过的所有引用都说使用extern"C",但这似乎仍然留下了一个前导下划线,并且在导出的名称之后加了一个@加号.
最糟糕的一点是在目标语言中加载扩展dll的自动方式基本上是"func_name = GetProcAddress(dll,"func_name")"所以使用未修饰的名称GetProcAddress失败,并使用装饰名称它抱怨非法变量名称( @ 不被允许) :(
如何让VC++导出一些没有名字装饰的东西呢?
extern "C" __declspec(dllexport) int __stdcall test(int x, const char *str);
Run Code Online (Sandbox Code Playgroud)
DUMPBIN.EXE
00011366 _test @ 8 = @ ILT + 865(_test @ 8)
我想把一些数据写入xlsx spreadshhet(最终成为一个有多个shhets的现有数据,但现在很乐意创建一个空白的单页文件).
环顾四周似乎我需要使用excel ODBC驱动程序(Microsoft Excel驱动程序(*.xls,*.xlsx,*.xlsm,*.xlsb))将数据写入电子表格.
但是,这失败了:"未安装驱动程序:Microsoft Excel驱动程序(*.xls,*.xlsx,*.xlsm,*.xlsb)"
我在Windows 7 Home 64bit上安装了64位版本的Office 2010 Pro Plus(我认为这是学生们获得的版本?).我正在尝试创建一个32位应用程序.
在这里使用ODBC有办公室和Windows版本,还是应用程序的位数有一些基本问题?ODBC是将数据写入文件的最佳选择吗?
一个要求是我可以写任何文件,excel不需要打开(但excel 2007或更高版本将安装在系统上).
CString sDriver = L"Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)";
CString sExcelFile = L"c:\\test.xlsx";
CString connect;
connect.Format(L"DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",
sDriver, sExcelFile, sExcelFile);
Run Code Online (Sandbox Code Playgroud) 我正在编写一个使用数据库(目前是MySQL 4)来存储数据的应用程序.
我可能会稍后以更新的形式对此进行更改以添加其他数据.更新应用程序很简单,它基本上归结为用新的程序文件覆盖程序文件.但是,如何更新数据库架构?
数据库是远程的,因此我的应用程序可能存在于多个位置,因此只需在安装程序中转储ALTER和CREATE语句就会导致多次更改,并且我已经明确要求提供允许应用程序的自动解决方案要在过渡期间更新的副本,以及要自动进行架构更新的副本.
我考虑在启动时检查模式以查找缺少的表和列,并根据需要添加它们,但这似乎不是一个干净的解决方案.我也算是把某种"架构版本"号的数据库上,但不能看到任何方式做到这一点很短的单行表与诠释"版本"列这似乎不是一个好办法要么.