Конференція vbstreets - перегляд теми - byval, byref що це таке

У всіх деклараціях WinApi-функцій зустрічаються ключові слова ByVal і ByRef. Знаю, що вони означають "за значенням" і "за посиланням", але де і як їх можна використовувати? Підкажіть? Якщо можна з прикладом.
Часто в моїх кодах використовую купу дублюючих змінних. Відчуваю, що це не зовсім правильно - плодити це стадо. Думаю, застосуванням передач значень "за посиланням" можна спростити код. Але не знаю як. Дякуємо.

GSerg писал (а): ByVal і ByRef - два способи передачі параметрів. Справа в тому, що VB не підтримує покажчики явно, але все-таки підтримує. Передача параметра ByRef (вона використовується за умовчанням, якщо не вказати спосіб передачі) - це передача покажчика на значення. Приймаюча процедура повинна буде при кожному зверненні до параметру отримувати його значення за вказівником. Передача ByVal - передача не покажчика, а самого значення. Приймаюча функція не повинна зиріть в покажчик, вона відразу має значення. У мові C, наприклад, передача покажчика на ціле - int * a, а передача самого цілого - int a. У VB передача покажчика на ціле - byref a (або просто а), передача самого цілого - byval a.
Передача ByVal має сенс при числових значеннях, оскільки покажчик зазвичай має розмір 4 байта, що передається число (наприклад, Long) - теж, тому можна відразу штовхати його, так швидше. А передача ByRef актуальна при передачі покажчиків на об'єкти, структури і масиви (все це можна передати ByVal), і, крім того, в тих випадках, коли викликається процедура повинна мати можливість змінити переданий параметр так, щоб ця зміна мало ефект у викликає процедурі.

З ключовим словом byVal функція Dll працює з перетвореної формою стік (С) і всі зміни відображаються в заданій стрічці.

без ByVal ти працюєш безпосередньо з рядком VB. тобто стічна змінна перетворюється на рядок OLE (BSRT).

Без кл. слова ByVal практично завжди порушується вміст пам'яті, і виникають фатальні винятку

Думаю, застосуванням передач значень "за посиланням" можна спростити код.

хм. я так не думаю (((
працювати відразу з рядком VB клопітно справу. У книги Дана Епплмана докладно все пояснюється на пальцях і на прикладах (Приклади є. Якщо хочеш можу викласти або на мило кинути).