我试图找出如何使用C预处理器将#define'd int 连接到#define'字符串.我的编译器是CentOS 5上的GCC 4.1.该解决方案也适用于MinGW.
我想在字符串上附加一个版本号,但我能让它工作的唯一方法是将版本号的副本定义为字符串.
我能找到的最接近的东西是引用宏参数的方法,但它不适用于#defines
这不起作用.
#define MAJOR_VER 2
#define MINOR_VER 6
#define MY_FILE "/home/user/.myapp" #MAJOR_VER #MINOR_VER
Run Code Online (Sandbox Code Playgroud)
它不没有工作,#小号或者是因为值为数字,它会扩大到"/home/user/.myapp" 2 6,这是无效的Ç.
这确实有效,但我不喜欢有版本定义的副本,因为我确实需要它们作为数字.
#define MAJOR_VER 2
#define MINOR_VER 6
#define MAJOR_VER_STR "2"
#define MINOR_VER_STR "6"
#define MY_FILE "/home/user/.myapp" MAJOR_VER_STRING MINOR_VER_STRING
Run Code Online (Sandbox Code Playgroud) 我有一个使用SWT作为工具包的Java应用程序,我厌倦了更新GUI元素所需的所有丑陋的样板代码.
只是要设置一个禁用按钮启用我必须经历这样的事情:
shell.getDisplay().asyncExec(new Runnable() {
public void run() {
buttonOk.setEnabled(true);
}
});
Run Code Online (Sandbox Code Playgroud)
我更喜欢保持我的源代码尽可能平坦,但我需要一个高达3个缩进级别来做一些简单的事情.
有什么方法可以包装吗?我想要一个类:
public class UIUpdater {
public static void updateUI(Shell shell, *function_ptr*) {
shell.getDisplay().asyncExec(new Runnable() {
public void run() {
//Execute function_ptr
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
并且可以像这样使用:
UIUpdater.updateUI(shell, buttonOk.setEnabled(true));
Run Code Online (Sandbox Code Playgroud)
像这样的东西对于隐藏SWT似乎认为有必要做任何事情的可怕混乱都是很好的.
据我了解,Java不能做函数指针.但Java 7将有一个名为Closures的东西应该是我想要的.但与此同时,我可以做任何事情来将函数指针或回调传递给另一个要执行的函数吗?
顺便说一句,我开始认为在Swing中重做这个应用程序是值得的,而且我不必忍受这个丑陋的垃圾和SWT的非跨平台性.
在我的Java应用程序中,我正在编写一个用于查看PDF文件的组件.我有一个非常漂亮的实现,用户可以点击PDF并拖动它来查看不适合屏幕的区域.但我的老板不喜欢它,所以现在我必须使用滚动条.所以我做了一件显而易见的事情并将其放入JScrollPane中,但几乎无论我做什么它都拒绝工作.
PDF只是转换为BufferedImage然后我将其转换为ImageIcon,所以我可以将它添加到JLabel,它被添加到JScrollPane.
我有一个PDFViewer类,它是JScrollPane的子类,重要的代码在这里:
private void drawPDF() {
PDFRenderer renderer = new PDFDrawer(pdfFile);
BufferedImage image = renderer.makeImage(page);
JLabel img = new JLabel(new ImageIcon(image));
this.setViewportView(img);
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个单独的类,它需要将我的PDFViewer添加到JFrame的子类.只要我不使用布局并将PDFViewer直接添加到JFrame,它就可以工作.如果我甚至只是将JScrollPane添加到JPanel然后将JPanel添加到JFrame中,滚动条就会消失,看起来我直接添加了JLabel.图像太大了,它很容易被切断.
我还需要为框架添加一些控件,所以我设置了一个非常基本的GridBagLayout,其中PDFViewer是唯一添加的组件.通过以下代码,我得到一个看起来像这样的窗口.
GridBagLayout glayout = new GridBagLayout();
GridBagConstraints c;
setLayout(glayout);
PDFViewer viewer = new PDFViewer("foo.pdf");
c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.gridheight = 1;
c.gridwidth = 1;
add(viewer, c);
setVisible(true);
Run Code Online (Sandbox Code Playgroud)
当我只是简单地将它添加到布局而不是直接添加到JFrame时,为什么JScrollPane会像这样被弄脏?我发现它适用于GridLayout,但GridLayout不是我想要的.
我正在研究一个从音乐文件中读取标签信息的C库.我已经得到了ID3v2,但我无法弄清楚Ogg文件是如何构建的.
我在hexeditor中打开了一个.ogg文件,我可以找到标签数据,因为这是人类可读的.但是从文件开头到标签数据的所有内容都像垃圾一样.这些数据是如何编码的?
我在实际代码中不需要任何帮助,我只需要帮助可视化Ogg标题的样子以及它使用的编码,以便我可以阅读它.我想使用非hacky方法来读取Ogg文件.
我一直在看Flac格式,这很有帮助.
我正在查看的Flac文件在"fLac"标识符和人类可读的"注释"部分之间有大约350个字节,并且在我的十六进制编辑器中没有一个是人类可读的,所以我确信在那里必须有一些重要的东西.
我正在使用Linux,我无意移植到Windows或OS X.所以如果我需要使用glibc only函数来转换编码,我很好.
我用Visual C++ 2008包装文件,我已经弄清楚如何嵌入它们,但我无法弄清楚如何检索它们.我有一些C++经验,但没有Win32或Visual C++.包装的目标是运行一些代码,如果一切正常,它可以运行嵌入的文件.
我正在包装许多不同的文件,因此代码重用是关键,在所有情况下我都不知道嵌入文件的名称.但我可以将exe命名为与包装文件相同的名称,因此如果程序可以获得自己的名称,那么它也可以运行.
一些包装文件将是exes,其他文件将是由外部程序运行的文件.
编辑:这些文件嵌入了.res文件,它们不仅仅连接到exe的末尾.
我是PHP和SQL的新手,但我需要一种方法将SQL查询的结果存储到变量中.
查询是这样的:
$q = "SELECT type FROM users WHERE username='foo user'";
$result = pg_query($q);
Run Code Online (Sandbox Code Playgroud)
查询只返回一个字符串; 用户的帐户类型,我只需将其存储在变量中,以便查看用户是否有权查看页面.
我知道我可能只是做这个查询:
"SELECT * FROM users WHERE username='foo user' and type='admin'";
if(pg_num_rows($result) == 1) {
//...
}
Run Code Online (Sandbox Code Playgroud)
但对我来说这似乎是一种不好的做法.
无论哪种方式,最好知道如何将其存储为变量以供将来参考.
我正在使用Linux并尝试通过send()发送长消息.消息是1270字节,但我的客户端应用程序只接收1024字节.
由于1024字节是一个方便的数字,我猜测send()一次只能发送1024个字节.我查看了发送的手册页,但所有关于长消息的说法是:
当消息不适合插入插座的发送缓冲区,发送()通常块,除非该插座已被放置在非阻塞I/O模式.在非阻塞模式下,在这种情况下,它将失败并出现错误EAGAIN或EWOULD-BLOCK.select(2)调用可用于确定何时可以发送更多数据.
我正在使用阻止模式,手册页没有说明要做什么.我发送的确切电话看起来像这样:
send(socket, message, strlen(message), 0);
我需要将字符串拆分为1024字节块并单独发送吗?我的客户如何处理这个问题?如果我的客户需要做什么,我就提到,这是在Java中,它使用InputStreamReader的接收数据.
c ×3
java ×2
c++ ×1
jscrollpane ×1
metadata ×1
networking ×1
oggvorbis ×1
php ×1
postgresql ×1
send ×1
sql ×1
swing ×1
swt ×1
winapi ×1
word-wrap ×1