Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Help DLL vs Excel Please!

2.3K
30 ноября 2002 года
Lelik
3 / / 09.11.2002
Народ, помогите пожалуста разобраться в чем проблемма,
все тот же поиск файлов (DLLка):
//MyDLL.cpp------------------------------------------------------------------------
#include <windows.h>
#include <io.h>


BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,
LPVOID lpReserved )
{
switch( fdwReason )
{
case DLL_PROCESS_ATTACH:break;
case DLL_THREAD_ATTACH:break;
case DLL_THREAD_DETACH:break;
case DLL_PROCESS_DETACH:break;
}
return TRUE;
}

long frst;
_finddata_t data;
char * _stdcall FFIND(char * FName)
{
frst = _findfirst(FName,&data);
if (frst != -1)
return data.name;
return NULL;
}
char * _stdcall NFIND()
{
return data.name;
}
bool _stdcall BoolFlag()
{
if ((frst != -1) && (_findnext(frst,&data) != -1))
return 1;
_findclose(frst);
return 0;
}
//------------------------------------------------------------------------

DLL запрашивается Excel-ем:

Private Declare Function FFIND Lib "D:\MyDLL\Debug\MyDLL.dll" _
(ByVal FName As String) As String

Private Declare Function NFIND Lib "D:\MyDLL\Debug\MyDLL.dll" _
() As String

Private Declare Function BoolFlag Lib "D:\MyDLL\Debug\MyDLL.dll" _
() As Boolean

Private Sub CommandButton1_Click()

Dim i
i = 4

With Worksheets("Лист1")

If .Cells(3, 2).Value <> "" Then
.Range(Cells(3, 2), Cells(200, 2)).Value = ""
End If
.Cells(3, 2).Value = FFIND(TextBox1.Text) ''Вывод первого найденного файла
''.Cells(5, 5).Value = BoolFlag()
While (BoolFlag() = 1) ''Пока Флаг не сброшен
.Cells(i, 2).Value = NFIND() ''Выводим следующий найденный файл
i = i + 1
Wend
End With
End Sub
-----------------------
Когда вводишь конкретный шаблон: D:\*.CFG
то CFGшки и выдает (если KERNEL32.DLL не выполняет
недопустимых ошибок :), что иногда бывает), а когда
вводишь D:\*.* выдает какую-то хрень:
.ист1
.heetChange
mheetChange
rheetChange
theetChange
pharaon.cfg
pixel.xls
pheetChange
pheetChange
aheetChange
Скажите, ошибка может где, или можно проще сделать?
Спасибо за ответы.
532
02 декабря 2002 года
Ghost
34 / / 20.01.2000
Цитата:
Originally posted by Lelik

Может, можно без C обойтись?
Примерно так (адаптировано с http://www.mvps.org/vbnet/index.html?code/fileapi/folderenumbasic.htm):

Option Explicit

Public Declare Function FindFirstFile Lib "kernel32" _
Alias "FindFirstFileA" _
(ByVal lpFileName As String, _
lpFindFileData As WIN32_FIND_DATA) As Long

Public Declare Function FindNextFile Lib "kernel32" _
Alias "FindNextFileA" _
(ByVal hFindFile As Long, _
lpFindFileData As WIN32_FIND_DATA) As Long

Public Declare Function FindClose Lib "kernel32" _
(ByVal hFindFile As Long) As Long

Public Const MAX_PATH As Long = 260

Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

Public Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type

Public Sub Getfiles()
Dim WFD As WIN32_FIND_DATA
Dim hFile As Long
ReDim fArray(1) As String
Dim i As Integer
Dim found As Integer

hFile = FindFirstFile("D:\My Documents\*.doc" & Chr$(0), WFD)

If hFile = -1 Then Exit Sub

If (Trim(WFD.cFileName) <> ".") And (Trim(WFD.cFileName) <> "..") Then
fArray(1) = Trim(WFD.cFileName)
found = 1
WFD.cFileName = ""
End If

While FindNextFile(hFile, WFD)
If (Trim(WFD.cFileName) <> ".") And (Trim(WFD.cFileName) <> "..") Then
found = found + 1
ReDim Preserve fArray(found)
fArray(found) = Trim(WFD.cFileName)
WFD.cFileName = ""
End If
Wend
Call FindClose(hFile)

Debug.Print "****Results****"
For i = 1 To found
Debug.Print fArray(i)
Next i
Debug.Print "****End****"

End Sub

Возможно, код непричесан, но, вобщем, работает.

2.3K
04 декабря 2002 года
Lelik
3 / / 09.11.2002
Цитата:
Originally posted by Ghost
Может, можно без C обойтись?


Нет, у меня задание по С.

Но все равно большущее спасибо.
Я разобрался уже - это Эксель не хочет нормально данные строковые принимать, ему посимвольно надо видети ли.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог