我遇到了一个问题,我的可执行文件可能会收到中止/重试/忽略对话框,例如:
调试错误!程序:... whatever.exe
R6010-已调用abort()
我相信这是因为我有一个未处理的异常,可以使用以下简单程序复制该问题:
int _tmain(int argc, _TCHAR* argv[])
{
try
{
throw std::exception();
}
catch (std::logic_error& e)
{
}
std::cout << "Hello World!";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的假设是否正确(它是由未处理的异常引起的)?我在网上找到了很多有关该错误的示例,但实际上并没有定义错误代码的含义。
此错误仅发生在我的调试版本中。我的发布版本将在崩溃之前挂起(这是我对未处理异常的期望)。
语言:C#,系统:Windows7,Excel 2007
我想从一些数据创建.DBF,我想从Excel 2007打开它.它可以是dBase或foxpro.我目前正在使用FoxPro9(顺便说一句,这段代码来自互联网):
OleDbConnection con = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=C:\\Temp\\;");
con.Open();
OleDbCommand cmd1 = new OleDbCommand("Create Table TestDBF (Field1 I, Field2 C(10))", con);
OleDbCommand cmd2 = new OleDbCommand("Insert Into TestDBF Values (1, 'Hello')", con);
OleDbCommand cmd3 = new OleDbCommand("Insert Into TestDBF Values (2, 'World')", con);
cmd1.ExecuteNonQuery();
cmd2.ExecuteNonQuery();
cmd3.ExecuteNonQuery();
con.Close();
Run Code Online (Sandbox Code Playgroud)
这会生成我可以在DbfViewer中打开的文件,但是,我无法在Excel 2007中打开它,也不能在我拥有的某些应用程序中使用.我可以使用DbfViwer手动将FoxPro .dbf转换为dbaseIII dbf,但我希望它是自动的.
有任何想法吗?
提前致谢
在Windows的FormatMessage()函数中,参数:
_Out_ LPTSTR lpBuffer
Run Code Online (Sandbox Code Playgroud)
我正在认真思考。按照 Hart 的 Windows 系统编程书籍,我声明一个LPTSTR指针用作lpBuffer(例如LPTSTR errortext;),然后调用该FormatMessage()函数。
传入该参数的正确方法是:(LPTSTR)&errorText
这很好用。但我不明白为什么我需要写(LPTSTR)。我知道这是类型转换,我读到了它,但它对我来说没有意义,因为我没有改变变量类型或任何东西,我将它声明为 anLPTSTR并且我将它的内存地址传递给函数,函数需要 anLPTSTR并且我将其传递给了 an LPTSTR,那么为什么我需要将其(LPTSTR)作为参数的一部分呢lpBuffer?
我尝试在Visual Studio 2013中编译单元测试时收到以下错误:
错误1错误C2338:测试编写者必须为您的类类std :: basic_string <wchar_t,struct std :: char_traits <wchar_t>定义ToString <Q*q>的特化,类std :: allocator <wchar_t >> __cdecl Microsoft :: VisualStudio :: CppUnitTestFramework :: ToString <struct HINSTANCE __>(struct HINSTANCE__*).
您可以通过如下所示的测试方法来复制错误:
const std::wstring moduleName = L"kernel32.dll";
const HMODULE expected = GetModuleHandle(moduleName.c_str());
Microsoft::VisualStudio::CppUnitTestFramework::Assert::AreEqual(expected, expected);
Run Code Online (Sandbox Code Playgroud)
有谁知道我需要怎么写这样的专业化ToString?
c++ windows unit-testing vs-unit-testing-framework visual-studio-2013
我使用的是第三方API,其中包含一个包含一组typedef的头文件.在过去的4年中,对某些typedef进行了微小的更改(例如,在unsigned/signed之间切换,从int更改为long等).
我想在我的代码中添加编译时检查,以便我知道特定的typedef是否已更改.我想添加如下内容:
#if !std::is_same<::ApiType, int>::value
#error Type has changed
#endif
Run Code Online (Sandbox Code Playgroud)
当我在各种typedef中尝试这个时,我发现总是抛出编译错误.
我设置了一个小的控制台程序,它显示了同样的问题(即对于预处理器使用总是假的)但在预处理器之外很好:
#include "stdafx.h"
#include <Windows.h>
#include <type_traits>
int main()
{
#if std::is_same<int, int>::value
const auto aa = 14; // omitted
#else
const auto bb = 17;
#endif
#if std::is_same<::DWORD, int>::value
const auto cc = 14; // omitted
#else
const auto dd = 17;
#endif
const auto a = std::is_same<int, int>::value; // true
const auto b = std::is_same<::DWORD, int>::value; // false
const auto c = std::is_same<::DWORD, unsigned long>::value; // true …Run Code Online (Sandbox Code Playgroud) 我的公司有一个旧的应用程序(从2005年左右开始)使用Visual FoxPro 7,遗憾的是他们没有源代码(.PJX,.PJT)文件.我必须更改连接字符串,因为我们必须将数据库移动到新服务器.问题是(connection.dbf文件)中的连接字符串是加密的.
我用文本编辑器打开了.exe文件,发现了以下代码
SET LIBRARY TO libs\Cipher50.fll ADDITIVE
Run Code Online (Sandbox Code Playgroud)
Cipher50.fll存在于根应用程序文件夹中.
我的问题
我想创建一个可以加载"Cipher50.fll"文件的应用程序(可能像.NET Reflection)并使用正确的函数,以便我可以更新我的connection.dbf文件.
我怎样才能做到这一点?
PS:我对Visual FoxPro一无所知.