Я написал программу на C, которая считывает некоторые значения из двоичных файлов и записывает их в БД SQLite. Я преобразовал тот же файл в библиотеку DLL и вызвал его из приложения Windows Form в C #. Ниже приведен пример, который иллюстрирует, что я хочу сделать:
В C # я использую следующее
[DllImport("Progress.dll", EntryPoint = "CreateDB", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
private static extern int avance(IntPtr Path);
Код DLL C выглядит так:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <stdint.h >
#include <math.h>
#define EXPORT __declspec(dllexport)
EXPORT void CreateDB(int f)
{
for (int i=0;i<4;i++)
{
sleep(1);
f=i+1;
}
}
Переменная f возвращает значение, которое я хочу использовать в индикаторе выполнения.
Код Exe C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <stdint.h>
#include <math.h>
int main()
{
for (int i=0;i<4;i++)
{
sleep(1);
}
}
Теперь, когда я вызываю программу на C как DLL, выполнение этой задачи длится три раза. Я ожидаю, что время очень похоже на файл C exe. Кроме того, индикатор выполнения не обновляется в режиме реального времени.
Код C # в форме приложения для Windows выглядит следующим образом:
private void button7_Click(object sender, EventArgs e)
{
progressBar1.Maximum = 4;
IntPtr strPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(int)));
progressBar1.Value = avance(strPtr);
Application.DoEvents();
}
Как я могу решить проблему со скоростью и как обновить индикатор выполнения при запуске цикла в C DLL?
Заранее спасибо за помощь.