2012-06-11 46 views
0

我们正在考虑从PCRE正则表达式改为 ICU正则表达式,以利用ICU的UTF-8 Unicode常规表达式 。我们掌握了一个测试程序来加载ICU pnames.icu文件 ,这是编译和运行ICU UTF-8 Regular 表达式所必需的,这些表达式似乎是正常工作的。 是否可以将pnames.icu的内容存储在Windows的全局变量 中,以避免将ICU pnames.icu发送给用户? 谢谢。是否可以将pnames.icu的内容存储在Windows C++全局变量中?

+0

是的。一种方法是将它们填充到应用程序的资源中,并使用查找/加载资源来加载它们 –

+0

@Captain Oblivious,我们应该使用哪种WinAPI函数来读取pnames.icu的内容并将它们填充到应用程序的资源中?谢谢你的建议。 – Frank

+1

嗨队长&&所有,我们搜索并发现这个堆栈溢出文章。 http://stackoverflow.com/questions/2933295/embed-text-file-in-a-resource-in-a-native-windows-application------原生Windows应用程序资源中的嵌入文本文件。它会适用于pnames.icu吗?谢谢 – Frank

回答

1

您可以像使用图标一样将文件添加到资源脚本开始。所不同的是,你会通过名称指定资源,而不是一个整数值,告诉资源编译器,该文件被称为“ICU”自定义资源类型

pname1  ICU  "pname1.icu" 
pname2  ICU  "pname2.icu" 
pname3  ICU  "pname3.icu" 

加载资源,你首先需要找到它按名称和类型(在本例中为ICU)。一旦你找到它,你可以告诉窗口加载资源数据,然后“锁定”它以获得指向它的指针。

// Find the resource 
HRSRC hRes = FindResource(NULL, L"pname1", L"ICU"); 

// Load the resource 
HGLOBAL hResLoad = LoadResource(NULL, hRes); 

void* icuData = LockResource(hResLoad); 

// ... do something with the resource @ icuData 


// We're done so let it go. 
UnlockResource(icuData); 
+0

CAPTAIN不经意,我刚刚接受了你的Stack Overflow答案。如果我们在Solaris UNIX上执行相同的操作,我们将如何继续?感谢您的帮助。 – Frank

+0

@Frank不知道要为Solaris推荐什么。不过这不太可能是内置功能。你可能想看看一个简单的资源包装器。 –

+0

CAPTAIN不遗余力,我们搜索了一些,发现这篇关于如何在gcc可执行库中嵌入文件的Stack Overflow文章。然而,它没有提到Solarix UNIX。感谢您的帮助。 http://stackoverflow.com/questions/4864866/c-c-with-gcc-statically-add-resource-files-to-executable-library – Frank