我有一个Visual Basic应用程序,如果安装运行不止一次,往往会严重搞砸.似乎偶尔客户端错误地将安装程序错误地提供给它的快捷方式,再次运行安装程序并且它会使一切都混乱.我不能为我的生活弄清楚为什么所以我决定最简单的方法就是让它只能在机器上运行一次,否则它就会结束.有任何想法吗?
我在C程序中嵌入了Python解释器.假设C程序从文件中读取一些字节到char数组和学习(以某种方式),该字节表示以一定的编码文本(例如,ISO 8859-1中,Windows-1252,或UTF-8).如何将此char数组的内容解码为Python字符串?
Python字符串通常应该是类型unicode- 例如,0x93Windows-1252编码的输入变为u'\u0201c'.
我试图使用PyString_Decode,但是当字符串中有非ASCII字符时它总是会失败.这是一个失败的例子:
#include <Python.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
char c_string[] = { (char)0x93, 0 };
PyObject *py_string;
Py_Initialize();
py_string = PyString_Decode(c_string, 1, "windows_1252", "replace");
if (!py_string) {
PyErr_Print();
return 1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误消息是UnicodeEncodeError: 'ascii' codec can't encode character u'\u201c' in position 0: ordinal not in range(128),表示ascii即使我们windows_1252在调用中指定,也使用编码PyString_Decode.
以下代码通过使用PyString_FromString创建未解码字节的Python字符串,然后调用其decode方法来解决此问题:
#include <Python.h>
#include <stdio.h> …Run Code Online (Sandbox Code Playgroud) 我发现通常有一个单一的类型或命名空间,它接受任何特定的枚举作为参数,因此我总是在那里定义那些枚举.最近,我有一个同事大肆宣传这是一个愚蠢的事情,你应该总是在项目的根目录中有一个枚举命名空间,你可以在其中定义每个枚举类型.
定位枚举类型的最佳位置在哪里?
我正在使用C#,.NET 3.5.我理解如何利用事件,如何在我的班级中声明它们,如何将它们从其他地方挂钩等等.一个人为的例子:
public class MyList
{
private List<string> m_Strings = new List<string>();
public EventHandler<EventArgs> ElementAddedEvent;
public void Add(string value)
{
m_Strings.Add(value);
if (ElementAddedEvent != null)
ElementAddedEvent(value, EventArgs.Empty);
}
}
[TestClass]
public class TestMyList
{
private bool m_Fired = false;
[TestMethod]
public void TestEvents()
{
MyList tmp = new MyList();
tmp.ElementAddedEvent += new EventHandler<EventArgs>(Fired);
tmp.Add("test");
Assert.IsTrue(m_Fired);
}
private void Fired(object sender, EventArgs args)
{
m_Fired = true;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我不明白的是,当一个人声明一个事件处理程序时
public EventHandler<EventArgs> ElementAddedEvent;
Run Code Online (Sandbox Code Playgroud)
它从未被初始化 - 所以,究竟是什么是ElementAddedEvent?它指向什么?以下操作无效,因为EventHandler永远不会被初始化:
[TestClass]
public class …Run Code Online (Sandbox Code Playgroud) 我有一些编写了一些测试围绕FTP服务器API的包装器的单元测试.
单元测试和FTP服务器都在同一台机器上.
包装器API部署到我们的平台,并用于远程处理和Web服务方案.包装器API本质上使用XML消息来执行诸如添加/删除/更新用户,更改密码,修改权限等任务.
在单元测试中,比如说要将用户添加到虚拟域,我创建XML消息以发送到API.API执行它并返回一个响应,其中包含有关操作是成功还是失败的状态信息(错误代码,验证失败等).
要验证API包装器代码是否确实做了正确的事情(如果响应指示成功),我调用FTP服务器的COM API并直接查询其商店以查看,例如,在创建用户帐户时,用户帐户是否确实得到了.
这味道不好吗?
更新1: @ Jeremy/Nick:包装器是测试的重点,FTP服务器及其COM API是第三方产品,可能经过良好测试和稳定.包装器API必须解析XML消息,然后调用FTP服务器的API.我如何验证,这可能是一个愚蠢的情况,包装器正确设置了用户帐户的特定属性.例如,由于包装器代码中的拼写错误而设置了FTP帐户的错误属性或属性.一个很好的例子是设置上传和下载速度限制,这些可能会在包装器代码中转换.
更新2:感谢大家的答案.对于那些建议使用模拟的人来说,它已经超出了我的想法,但光线还没有在那里开启,我仍然在努力让我的头脑如何让我的包装器与模拟FTP服务器一起工作.模拟驻留在哪里,我是否将所述模拟的实例传递给包装器API而不是调用COM API?我知道嘲笑但是很难理解它,主要是因为我发现大多数的例子和教程都是如此抽象而且(我很惭愧地说)接近难以理解.
我正在使用ASP页面,我必须读取CSV文件并将其插入到DB表"Employee"中.我正在创建一个TestReader的对象.如何编写一个循环来执行最多正在读取的CSV文件的行数/记录数?
我的应用程序是一个vb6可执行文件,但系统中的一些较新的表单是用C#编写的.我希望能够使用主应用程序窗口的句柄设置C#表单的Owner属性,以便在我的应用程序和其他应用程序之间来回切换时,对话框保持在最顶层.
我可以获得主应用程序窗口的hwnd.我不确定我能从那里做什么?
更新2008年10月20日17:06:
斯科特,
谢谢你的回复.我忽略了Show/ShowDialog方法参数不是Form类型 - 我只查看Owner属性.
我稍微修改了我正在使用的代码 - 我们有一个组件通常加载我们的Forms并调用ShowDialog.我的代码看起来像这样:
Form launchTarget = FormFactory.GetForm(xxx); // psuedo-code for generic form loader
launchTarget.StartPosition = FormStartPosition.CenterParent;
IWin32Window parentWindow = GetWindowFromHwnd(hwnd);
launchTarget.ShowDialog(parentWindow);
Run Code Online (Sandbox Code Playgroud)
GetWindowFromHwnd 是代码的方法包装版本:
private IWin32Window GetWindowFromHost(int hwnd)
{
IWin32Window window = null;
IntPtr handle = new IntPtr(hwnd);
try
{
NativeWindow nativeWindow = new NativeWindow();
nativeWindow.AssignHandle(handle);
window = nativeWindow;
}
finally
{
handle = IntPtr.Zero;
}
return window;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这并不是我所希望的.表单以模态方式显示,但它没有显示在正确的位置,也没有在我离开并返回父窗口时仍然在顶部.我们的模态不会在任务栏中显示任务,因此窗口看起来"消失"(尽管它仍然存在于alt-tab窗口列表中).那对我来说表明我可能没有合适的人.如果您有任何其他建议,请回复.再次感谢.
更新于2008年11月10日16:25
一个跟进注释 - 如果你将它分解为try/finally中的方法调用,就像在Scott的第二篇文章中那样,finally块中的调用应该是:
parentWindow.ReleaseHandle();
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用jcarousel来构建一个包含多行的容器,我尝试过一些东西,但没有运气.任何人都可以就如何创建它提出任何建议吗?
我正在处理一组类似于以下内容的数据.
Run Code Online (Sandbox Code Playgroud)StudentName | AssignmentName | Grade --------------------------------------- StudentA | Assignment 1 | 100 StudentA | Assignment 2 | 80 StudentA | Total | 180 StudentB | Assignment 1 | 100 StudentB | Assignment 2 | 80 StudentB | Assignment 3 | 100 StudentB | Total | 280
作业的名称和数量是动态的,我需要将结果与以下内容相似.
Run Code Online (Sandbox Code Playgroud)Student | Assignment 1 | Assignment 2 | Assignment 3 | Total -------------------------------------------------------------------- Student A | 100 | 80 | null | 180 Student B | 100 | 80 | 100 | …
我们正在考虑从Visual Studio 2005升级到Visual Studio 2008.我发现了以下令人不安的评论:
http://msdn.microsoft.com/en-us/library/6sehtctf.aspx
"从Visual C++ 2008开始,Visual C++不支持针对Windows 95,Windows 98,Windows ME或Windows NT."
这是否意味着如果我们使用visual C++ 2008重建我们的产品,他们将停止在Windows 98机器上工作?听起来像这样,但我很难相信他们会做出那么大的改变.
谢谢你的帮助.
c# ×2
.net-3.5 ×1
asp-classic ×1
c ×1
csv ×1
delegates ×1
embedding ×1
enums ×1
events ×1
hwnd ×1
javascript ×1
jcarousel ×1
jquery ×1
pivot ×1
python ×1
sql ×1
sql-server ×1
tdd ×1
unit-testing ×1
vb.net ×1
vb6 ×1
vbscript ×1
visual-c++ ×1
windows-98 ×1
winforms ×1