Declare Function strcpy Lib "msvcrt.dll" (Byval Dest As String, Byval Source As String) As Long
Private Sub Test()
Dim cs_text As String
Dim cs_word As String
cs_word = "word"
cs_text = String(512, 0)
strcpy cs_text, cs_word
MsgBox (cs_text)
End Sub
Выдаёт ошибку Bad DLL calling convention(пытаюсь сделать в Exel'евском VBA)
Подскажите пожалуйста что не так.
Здравствуйте, vba_user, Вы писали:
_>Выдаёт ошибку Bad DLL calling convention(пытаюсь сделать в Exel'евском VBA)
_>Подскажите пожалуйста что не так.
Лень. =) НО могу дать альтернативный путь:
1. Использовать
Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
2. Не пользоваться WinAPI вообще. Оператор "=" в VBA прекрасно справляется со своими обязанностями.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
ZAM>Лень. =) НО могу дать альтернативный путь:
ZAM>1. Использовать
Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Ну в качестве альтернативного пути можно было бы взять и lstrcpy из kernal32(хотя она и в 2 раза медленнее чем strcpy), но дело не в этом.
Меня интересовало почему нельзя экспортировать из msvcrt.dll. А именно хотелось бы экспортировать любимый sscanf и прочие очень удобные функции.
Ответ я нашол, но никак не хочется верить что нельзя экспортнуть cdecl функции в бэйсик.
Дело в том что в куске программы идёт обработка огромного количества строк, и очень не хватает любимых Си-функций, к которым привык.
ZAM>2. Не пользоваться WinAPI вообще. Оператор "=" в VBA прекрасно справляется со своими обязанностями.
Насчёт оператора "=" согласен.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков