我有一些代码我在cygwin(使用GCC)下编写成功使用gethostbyname(); 但是当我尝试直接使用解析器来检索DNS服务器的IP地址时,它失败了(nsaddr_list []中的所有条目都为null,nscount为-1).如果gethostbyname()正在工作,那么显然它能够连接到DNS服务器.
这段代码......
if (res_init() == -1) {
fprintf(stderr,"res_init() failed\n");
exit(1);
}
if (_res.nscount <= 0) {
fprintf(stderr,"nscount = %d\n",_res.nscount);
}
else {
for(i=0;i<_res.nscount;i++) {
fprintf(stderr, "dnssrvr: %d.%d.%d.%d\n",
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff) >> 0,
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff00) >> 8,
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff0000) >> 16,
(_res.nsaddr_list[i].sin_addr.s_addr & 0xff000000) >> 24);
}
}
Run Code Online (Sandbox Code Playgroud)
适用于unix/linux,但在cygwin上返回nscount = -1.使用cygwin/gcc时获取DNS服务器有什么技巧吗?
首先,请注意我知道有一些问题已经发布; 但他们似乎没有充分解决这个问题.我有一个C#应用程序,所有的pInvoke挂钩都与waveXXX API对话,我可以用它来捕获和回放音频.我也可以使用该API调整扬声器(WaveOut)音量.
问题在于,无论出于何种原因,该API都不允许我调整麦克风(WaveIn)音量.所以,我设法找到了一些混音器代码,我也已经通过pInvoke接入并允许我调整麦克风音量,但只能在我的W7 PC上调整.我开始使用的混音器代码来自这里:http:
//social.msdn.microsoft.com/Forums/en-US/isvvba/thread/05dc2d35-1d45-4837-8e16-562ee919da85
它的工作原理,但写的是调整扬声器音量.我添加了此处显示的SetMicVolume方法...
public static void SetMicVolume(int mxid, int percentage)
{
bool rc;
int mixer, vVolume;
MIXERCONTROL volCtrl = new MIXERCONTROL();
int currentVol;
mixerOpen(out mixer, mxid, 0, 0, MIXER_OBJECTF_WAVEIN);
int type = MIXERCONTROL_CONTROLTYPE_VOLUME;
rc = GetVolumeControl(mixer, MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE, type, out volCtrl, out currentVol);
if (rc == false)
{
mixerClose(mixer);
mixerOpen(out mixer, 0, 0, 0, 0);
rc = GetVolumeControl(mixer, MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE, type, out volCtrl, out currentVol);
if (rc == false)
throw new Exception("SetMicVolume/GetVolumeControl() failed");
}
vVolume = …Run Code Online (Sandbox Code Playgroud) 我有一个使用Process.Start(字符串Filename)打开文件的应用程序.此方法重载将导致系统根据文件扩展名调用相应的应用程序.就我而言,它通常是WORD,PPT,PDF,JPG等......某种类型的可查看文档.最后,我需要启动该过程,然后在应用程序中我需要使用MainWindowHandle值执行某些操作.
我发现至少有三种不同的情况会导致Process.Start(字符串文件名)返回不同的方式...
对于下面的第一个和第二个案例,假设我打开两个.pdf文件(但是如果我打开两个.ppt或两个.doc文件,似乎也会发生同样的事情)......
案例1:如果AcroRd32没有运行,我做了类似的事情..
Process p = Process.Start("yada.pdf");
p.WaitForInputIdle();
p.Refresh();
Run Code Online (Sandbox Code Playgroud)
事情按预期工作.正确填充值p.MainWindowHandle.这种情况没问题.
情况2:现在假设在调用Process.Start()时AcroRd32已经在先前打开的pdf文件上运行.现在事情变得怪异了.参考下面的代码(为清楚起见,删除了一些错误检查逻辑),在调用Process.Start()之后,p.MainWindowHandle的值为零(即使创建了窗口),并且p.MainWindowTitle为空.然后我睡了1秒钟,手柄仍然为零,但是主窗口现在已经填充(即使我没有在睡眠后调用p.Referesh().每个跟踪语句中都有"<<<<"注释在运行时打印.
Process p = Process.Start("SomeFileName.pdf");
p.WaitForInputIdle();
p.Refresh();
if (p.MainWindowHandle == 0)
DebugTrace("MainWindowHandle is zero, why??"); //<<<<
if (p.MainWindowTitle.Length == 0)
DebugTrace("MainWindowTitle is null"); //<<<<
Thread.Sleep(1000);
if (p.MainWindowHandle == 0)
DebugTrace("MainWindowHandle is still zero."); //<<<<
if (p.MainWindowTitle.Length == 0)
DebugTrace("MainWindowTitle is null");
else
DebugTrace("MainWindowTitle: " + p.MainWindowTitle); //<<<<
Run Code Online (Sandbox Code Playgroud)
我确定这与AcroRd32已经运行的事实有关,但是我无法控制它,我确实需要获得p.MainWindowHandle的值.任何想法如何处理这个?
情况3:然后进入第三种情况:在某些情况下,即使成功打开文件,Process.Start()也将返回null.我发现这是.jpg文件的情况,但我确信这只取决于已分配给.jpg扩展名的应用程序.如果应用程序是"Windows Photo Viewer",Process.Start("file.jpg")将返回null,但如果我将其更改为"Paint",则它不会返回null.那是怎么回事?那我该怎么办呢?
好的,一切都完成了,抱歉细节,但希望我正在解释我正在努力解决的情况!
我写了/支持一个名为uCon的终端模拟器(http://www.umonfw.com/ucon).它全部基于"good-ole"Win32,完全是'C'.我最近被要求支持将uCon连接到COM端口并为RS232流量控制之外的目的设置DTR/RTS的能力.我知道在使用EscapeCommFunction()和/或SetCommState()调用CreateFile()之后我可以这样做; 但是,这些函数只能被调用AFTER CreateFile()返回打开端口的句柄.不幸的是,当CreateFile()打开端口时,它将DTR/RTS设置为默认状态,这可能(或可能不)与我希望保留DTR的状态不同.
例如,假设用户的板连接到PC的串行端口,DTR线用于将板放置在某种非标准状态.在DTR无效的情况下,电路板运行"正常",但偶尔使用DTR激活将硬件转换到其他状态.
在大多数情况下,我看到,CreateFile()使DTR处于活动状态,然后我对清除DTR的调用将其恢复为非活动状态; 然而,这是一个我需要避免的故障.我发现了一个名为GetDefaultCommConfig()和SetDefaultCommConfig()的函数集,但是无法使它们成功运行.所以,我的问题是......
有没有办法预先定义在调用CreateFile()时将在RS232控制线上建立的默认状态?有没有人成功使用过GetDefaultCommConfig()/ SetDefaultCommConfig()?
在我看来,这应该允许我预先建立在调用CreateFile()时使用的DTR的值...
int
EstablishDefaultDTR(char *comPortName, int dtr)
{
COMMCONFIG cc;
DWORD bsize = sizeof(COMMCONFIG);
if (GetDefaultCommConfig(comPortName,&cc,&bsize) == 0) {
ShowLastError("GetDefaultCommConfig()");
return(-1);
}
if (dtr)
cc.dcb.fDtrControl = DTR_CONTROL_ENABLE ;
else
cc.dcb.fDtrControl = DTR_CONTROL_DISABLE ;
if (SetDefaultCommConfig(comPortName,&cc,bsize) == 0) {
ShowLastError("SetDefaultCommConfig()");
return(-1);
}
}
但是,正如您可能已经猜到的那样,事实并非如此.有任何想法吗?
我在C#中使用多行文本框来记录一些跟踪信息.我只是使用,AppendText("text-goes-here\r\n")因为我需要添加行.
我让这个程序运行了几天(有很多活动跟踪),我注意到它使用了大量内存.简而言之,即使将maxlength值设置为非常小的(256),文本框的内容也会不断扩展.
我认为它就像一个FIFO(扔掉超过最大长度的最古老的文本).它没有,它只是不断增加的规模.这显然是我记忆浪费的原因.谁知道我做错了什么?
在初始问题后几个小时添加...好的,我尝试了下面的建议代码.为了快速测试它,我只是在我的应用程序中添加了一个计时器,并从该计时器滴答我现在调用的方法与下面的代码基本相同.滴答率很高,以便我可以观察过程的内存使用情况并快速确定是否存在泄漏.没有.那很好; 但是,我把它放在我的应用程序中并且内存使用没有改变(仍然在泄漏).这肯定意味着我在其他方面有泄漏:-(但是,如果我只是在该方法的顶部添加一个返回,使用率会回落到稳定.对此有什么想法?定时器 - 勾选调用的代码确实不是累积内存,而是我的真实代码(相同的方法).不同之处在于我在实际代码中从各种不同的地方调用方法.调用的上下文能以某种方式影响这个吗?(注意,如果它不是已经很明显了,我不是任何.NET专家......
必须有办法做到这一点......
我有一个头文件,version.h有一行...
#define VERSION 9
Run Code Online (Sandbox Code Playgroud)
一些文件使用VERSION的定义值作为整数.没关系.
在不改变定义VERSION的方式的情况下,我需要构建一个包含该值的初始化"what"字符串,所以我需要这样的东西......
char *whatversion = "@(#)VERSION: " VERSION;
Run Code Online (Sandbox Code Playgroud)
显然这不会编译,所以不知怎的,我需要得到一个VERSION的预处理值的字符串,基本上给这个...
char *whatversion = "@(#)VERSION: " "9";
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?这可能吗?
我正在看别人的 C++ 代码(注意我对 C++ 不太流利)。
在类中,有一个成员函数:
void ClassYaba::funcname()
{
...
::foo();
...
}
Run Code Online (Sandbox Code Playgroud)
该类的命名空间中没有名为 的成员函数foo,但除此之外,::foo()和foo()(没有前导冒号)之间有什么区别?
我正在使用 .NET (C#) 和语音识别引擎。我希望能够加载和卸载语法,因为我的状态需要它们。在我看来,这是限制获得误报机会的好方法;但是,每当我运行 UnloadAllGrammars() 时,有时需要将近一分钟才能完成。
知道为什么会发生这种情况吗?
我需要能够在Windows机器上列出所有活动的应用程序.我一直在使用这段代码......
Process[] procs = Process.GetProcesses(".");
foreach (Process proc in procs)
{
if (proc.MainWindowTitle.Length > 0)
{
toolStripComboBox_StartSharingProcessWindow.Items.Add(proc.MainWindowTitle);
}
}
Run Code Online (Sandbox Code Playgroud)
直到我意识到当在他们自己的窗口中打开多个文件时,这不会列出像WORD或ACROREAD这样的情况.在那种情况下,使用上述技术仅列出最顶层的窗口.我假设这是因为即使打开了两个(或更多)文件,也只有一个进程.所以,我想我的问题是:如何列出所有窗口而不是其底层进程?
c# ×5
c ×3
c++ ×2
windows ×2
cygwin ×1
dns ×1
libresolv ×1
microphone ×1
mixer ×1
name-lookup ×1
networking ×1
serial-port ×1