Существует несколько причин, по которым LV может обнаружить sh при вызове DLL. Например, ошибка сегментации или любая другая ошибка sh внутри DLL.
С помощью int Text;
вы выделяете 4 байта памяти для хранения входящих данных, но вы позволяете функции recv()
получать до 64 байт. Если он получил более 4 байтов, он записывает данные за границу памяти Text
, и это может привести к ошибке сегментации. Просто разрешите чтение до 4 байтов (или sizeof(Text)
).
Кстати: если вы получите один байт, например A
(или 0x41
), он будет помещен в самый значащий байт Text
, поэтому Text
будет 0x41000000 = 1090519040. Но только если Text
раньше было 0. Вы не инициализируете его, что означает, что он может содержать любое случайное значение.
Далее, что такое sock
? Это нигде не объявлено в вашем коде. (Да, иначе он не будет компилироваться). Если sock
не инициализирован правильно, recv()
может взломать sh.
Наконец, текущая функциональность может быть достигнута в LabVIEW. Есть ли причина использовать DLL?