我正在编写VB.net并需要调用API(c语言DLL)
我的测试示例代码如下
//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,sourcefile)转换为VB.NET
由于
答案 0 :(得分:1)
使用the FileStream
class模式,使用VB .NET中fopen
模式的模拟"rb"
似乎是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)
但是,从C代码中的fseek
后跟ftell
来看,您希望将整个文件读入内存。这通常是不受欢迎的,因为文件大小可能是几千兆字节。如果您确实想这样做,请使用File.ReadAllBytes
方法,例如:
dim src_ch as Byte()
src_ch = File.ReadAllBytes("C:\\Docs\\Scandi\\attach\\verifyTest\\center.xml")