从外部DLL资源文件VB6读取文本文件内容

从外部DLL资源文件VB6读取文本文件内容,dll,resources,external,loadlibrary,Dll,Resources,External,Loadlibrary,我正在尝试从自定义DLL资源文件加载外部文本,但它不起作用 资源文件内容(包含Eula.txt的Test.dll、Test.rc和Test.res),Eula.txt文件约6Kb: 900 CUSTOM "Eula.txt" 我使用的代码如下: Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long Private De

我正在尝试从自定义DLL资源文件加载外部文本,但它不起作用

资源文件内容(包含Eula.txt的Test.dll、Test.rc和Test.res),Eula.txt文件约6Kb:

900 CUSTOM  "Eula.txt"
我使用的代码如下:

Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long  
Private Declare Function LoadString Lib "user32" Alias "LoadStringA" (ByVal hInstance As Long, ByVal wID As Long, ByVal lpBuffer As String, ByVal nBufferMax As Long) As Long  
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long

Public Function LoadStrRes(lgResID As Long) As String  
 On Error Resume Next  

 Dim lgRet As Long  
 Dim stBuff As String * 32768  
 Dim lgBuffPos As Long  
 Dim stFile As String  

 stFile = App.Path & "\Test.dll"  

 lgRet = LoadLibrary(stFile)  

 Call LoadString(lgRet, lgResID, stBuff, Len(stBuff))  

 lgBuffPos = InStr(1, stBuff, Chr$(0))  

 LoadStrRes = Left$(stBuff, lgBuffPos - 1)  

 Call FreeLibrary(lgRet)  

 Exit Function  
End Function  
Dim stTxtData As String  

stTxtData = LoadStrRes(900)  

txtEula.Text = stTxtData
像这样调用函数:

Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long  
Private Declare Function LoadString Lib "user32" Alias "LoadStringA" (ByVal hInstance As Long, ByVal wID As Long, ByVal lpBuffer As String, ByVal nBufferMax As Long) As Long  
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long

Public Function LoadStrRes(lgResID As Long) As String  
 On Error Resume Next  

 Dim lgRet As Long  
 Dim stBuff As String * 32768  
 Dim lgBuffPos As Long  
 Dim stFile As String  

 stFile = App.Path & "\Test.dll"  

 lgRet = LoadLibrary(stFile)  

 Call LoadString(lgRet, lgResID, stBuff, Len(stBuff))  

 lgBuffPos = InStr(1, stBuff, Chr$(0))  

 LoadStrRes = Left$(stBuff, lgBuffPos - 1)  

 Call FreeLibrary(lgRet)  

 Exit Function  
End Function  
Dim stTxtData As String  

stTxtData = LoadStrRes(900)  

txtEula.Text = stTxtData
有人能告诉我为什么它不适合我吗


中描述了加载字符串

LoadString
是为了加载字符串资源(意思是
STRINGTABLE
),而不是一般的RC_数据或自定义资源。按原样将字符串放在适当的STRINGTABLE中,这样可以加载字符串,尽管由于大小的原因,您可能会在存储整个EULA时遇到问题。

尽管您已经编写了两次,但您没有解释“不工作”的含义。如果你不能清楚地描述你所遇到的问题,那么很难帮助你,因为我们无法从我们坐的地方看到你的屏幕或读懂你的想法。如果你需要帮助,你需要回答你的问题并清楚地解释问题,然后你可以问一个比“为什么它对我不起作用?”更具体的问题。什么写了两次?!?该函数返回空字符串,但如果我读取STRINGTABLE,那么它工作正常,那么,为什么我不能使用该函数从外部资源文件中读取自定义数据?好的,我现在知道了,但是如何从外部资源文件中读取然后的RC_数据或自定义资源?您必须首先使用FindResource,然后调用SizeofResource,找出有多大,为它分配空间,调用LockResource,然后LoadResource,将内容实际放入您分配的空间,然后解锁resource,再次释放它。恐怕我不知道如何使用VB6实现这一点;我可以用其他几种语言,但不是那种语言。看到了,这是真的,我在C++中找到了,但是我需要VB6!(