2016-01-30 40 views
1

我真的寫VB.net,需要調用API(C語言DLL)如何轉換C代碼的fread到VB.NET

我的測試示例代碼如下

//Read Source File 
char *SourceFilePath = "C:\\Docs\\Scandi\\attach\\verifyTest\\center.xml"; 
FILE *sourcefile= fopen(SourceFilePath, "rb"); 
if (!sourcefile) 
{ 
    printf("Error=%s\n", *SourceFilePath); 
    return; 
} 

fseek(sourcefile,0,SEEK_END); 
long src_ch_len = ftell(sourcefile); 
rewind(sourcefile); 
unsigned char *src_ch =(unsigned char*)malloc(sizeof(char)*src_ch_len); 
result = fread(src_ch,1,src_ch_len,sourcefile); 
if(result!=src_ch_len) 
{ 
    printf("Reading Error=%s\n", *sourcefile); 
    return; 
} 

fclose(sourcefile); 

//Read Data File 
//Skip... 

rc = BasicVerify(algorithm, data, dataLen, key, signature, signatureLen); 

API函數定義

unsigned long verify(unsigned long algorithm, unsigned char *data, int dataLen,unsigned char *signature, int signatureLen, char *cerFile) 

如何給fopen(SourceFilePath, 「RB」)和FREAD(src_ch,1,src_ch_len,的資源文件)轉換爲VB.NET

謝謝

+0

[File.ReadAllText(https://msdn.microsoft.com/en-us/library/ms143368(V = VS。 110).aspx?cs-save-lang = 1&cs-lang = vb#code-snippet-1),[StreamReader.ReadToEnd](https://msdn.microsoft.com/zh-cn/library/system.io。 streamreader.readtoend(v = vs.110).ASPX?CS-保存琅= 1&CS琅= VB#代碼片斷-1) – BLUEPIXY

回答

1

在VB .NET中使用模式"rb"的模擬fopen似乎是the FileStream class使用FileAccess.Read模式。從那裏你可以使用FileStream.Read method作爲fread的模擬。例如:

dim sourceFile as FileStream 
sourceFile = new FileStream("C:\\Docs\\Scandi\\attach\\verifyTest\\center.xml", FileAccess.Read) 

dim result as Integer 
result = sourceFile.Read(array, 0, array.Length) 

然而,似乎從fseek隨後ftell在你的C代碼,你想閱讀整個文件到內存中。由於一個文件的大小可能是千兆字節,因此這經常被忽視。如果你真的想這樣做,使用File.ReadAllBytes方法,例如:

dim src_ch as Byte() 
src_ch = File.ReadAllBytes("C:\\Docs\\Scandi\\attach\\verifyTest\\center.xml")