我有一个跨平台应用程序,对于我的Linux和Mac版本,它生成一个postscript文件用于打印报告,然后用CUPS打印它们.它适用于简单的字符和图像,但我希望能够将真正的字体直接嵌入postscript文件中.有谁知道如何做到这一点??此外,我可以编码简单的ascii字符,但我不知道如何编码超出通常的az 0-9的任何字符,像带有重音符号的外来字符.
我想知道是否有一种简单的方法来检测剪贴板上的文本是ISO 8859还是UTF-8?
这是我目前的代码:
COleDataObject obj;
if (obj.AttachClipboard())
{
if (obj.IsDataAvailable(CF_TEXT))
{
HGLOBAL hmem = obj.GetGlobalData(CF_TEXT);
CMemFile sf((BYTE*) ::GlobalLock(hmem),(UINT) ::GlobalSize(hmem));
CString buffer;
LPSTR str = buffer.GetBufferSetLength((int)::GlobalSize(hmem));
sf.Read(str,(UINT) ::GlobalSize(hmem));
::GlobalUnlock(hmem);
//this is my string class
s->SetEncoding(ENCODING_8BIT);
s->SetString(buffer);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我的应用程序如何获取Linux上可用的True Type字体列表.
是否有一个标准目录,它们存储在不同的发行版中?或者其他一些标准方法来定位它们?
我已经编写了一个开源的c ++应用程序,它在Windows和Linux上运行良好,我终于得到了Mac Mini(10.5.8),所以我刚刚测试了Mac版本.
从终端窗口运行它并输入./appname我的应用程序工作正常,但如果我从查找器双击它,然后它首先打开一个termnial窗口,然后运行我的应用程序,但它似乎没有设置工作目录到正确的位置,所以我的应用程序死了.
如何通过双击启动我的应用程序,首先不打开终端窗口,如何将当前目录自动设置到应用程序位置?
我有一个开源应用程序,我目前只发布Windows版本的二进制文件.此时,Linux用户必须获取源代码并进行编译.是否有发布Linux二进制文件的标准方法?
我的应用程序是用c/c ++编写的,用gcc编译,我使用的唯一外部Linux代码是X Windows和CUPS.
我有一组回调类,用于处理具有可变数量参数的回调.现在我有大约6个不同的实例来处理不同数量的参数.有没有办法使一个实例可以处理可变数量的参数?最后,我希望每个参数都是POD类型或类指针,或结构指针.有任何想法吗?
template <class T>
class kGUICallBackPtr
{
public:
kGUICallBackPtr() {m_obj=0;m_func=0;}
void Set(void *o,void (*f)(void *,T *));
inline void Call(T *i) {if(m_func) m_func(m_obj,i);}
inline bool IsValid(void) {return (m_func!=0);}
private:
void *m_obj;
void (*m_func)(void *,T *);
};
template <class T,class U>
class kGUICallBackPtrPtr
{
public:
kGUICallBackPtrPtr() {m_obj=0;m_func=0;}
void Set(void *o,void (*f)(void *,T *,U *));
inline void Call(T *i, U *j) {if(m_func) m_func(m_obj,i,j);}
inline bool IsValid(void) {return (m_func!=0);}
private:
void *m_obj;
void (*m_func)(void *,T *,U *j);
};
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,当用户选择它时,在"当前"浏览器中启动一个网页.我的这部分应用程序在Windows版本中运行良好,但我无法弄清楚如何在Linux版本中执行此操作.
现在,Linux版本在特定目录中为Firefox进行了硬编码,并且每次都运行它的新实例,并且不显示我传入的URL.我希望它不会每次都启动一个新版本,而只是打开一个当前打开的新页面如果已经在运行.
对于Windows我使用:
ShellExecute(NULL,"open",filename,NULL,NULL,SW_SHOWNORMAL);
Run Code Online (Sandbox Code Playgroud)
对于Linux我目前使用:
pid_t pid;
char *args[2];
char *prog=0;
char firefox[]={"/usr/bin/firefox"};
if(strstri(filename,".html"))
prog=firefox;
if(prog)
{
args[0]=(char *)filename;
args[1]=0;
pid=fork();
if(!pid)
execvp(prog,args);
}
Run Code Online (Sandbox Code Playgroud) 如果我有一个固定大小的数组取决于它的定义和使用方式,我通常使用两种方法之一来引用它.
数组类型1:由于它是基于定义的固定大小,我只是在引用它的所有循环中使用该定义.
#define MAXPLAYERS 4
int playerscores[MAXPLAYERS];
for(i=0;i<MAXPLAYERS;++i)
{
.... do something with each player
}
Run Code Online (Sandbox Code Playgroud)
数组类型2:由于此数组可以随着项目的添加而增长,因此我使用sizeof来计算其中的条目数.编译器将大小转换为常量,因此不应该以这种方式执行任何运行时惩罚.
typedef struct
{
fields....
}MYSTRUCT_DEF;
MYSTRUCT_DEF mystruct[]={
{entry 1},
{entry 2},
{entry 3...n}
};
for(i=0;i<(sizeof(mystruct)/sizeof(MYSTRUCT_DEF));++i)
{
..... do something with each entry
}
Run Code Online (Sandbox Code Playgroud)
是否有一个更优雅的解决方案来处理数组处理而不会过早结束或过早停止.思考?评论?
在Lua中,使用C接口,给定一个表,如何遍历表的键/值对?
另外,如果使用数组添加了一些表表成员,我是否需要一个单独的循环来迭代这些成员,或者是否有一种方法可以同时迭代这些成员作为键/值对?
我正在为我的Sheevaplug(运行默认的Ubuntu安装)编写一个cgi-bin程序,该程序在浏览器页面中显示一个shell.它是一个单独的C程序,放在cgi-bin文件夹中并在浏览器中查看.它会自动启动一个守护进程,守护进程会分配一个shell实例.cgi-bin通过共享内存块与守护进程通信,守护进程通过将其stdin/stdout重定向到shell的stdout/stdin来与shell通信.离开页面时,它会自动关闭守护程序.
如果我使用"/ bin/sh"启动它并且我一次从浏览器向它发送一个完整的命令行,它就可以工作.但是使用这种设计并不是互动的.
所以我把它改为一次发送一个字符到"/ bin/sh"并添加"-i"所以shell运行在交互模式下.
shell启动时会显示错误"无法访问TTY,关闭作业控件".
然后它在准备好输入时显示'$'并且似乎有效,但是向它发送删除字符只是混淆它并且它没有正确处理删除.我不确定它是否处于交互模式.当我输入"su root"时,我收到错误"必须从终端运行".
我有什么想法我做错了吗?
PS:当我完成它将根据GPL发布.