سلام، منظورتون اين هست؟:
Private Sub Command1_Click()
Open "C:\Anti Keiler\Anti.exe" For Output As #1
Print #1, StrConv(LoadResData(101, "CUSTOM"), vbUnicode)
Close #1
End Sub
در اين كه دستور استفاده شده درست هست هيچ شكي نيست. مي تونيد دستور رو جاي ديگه اي استفاده كنيد تا از صحتش مطمئن شيد. دوست عزيز هميشه مشكلات برنامه مربوط به دستورات استفاده شده در اون نيست.
فايلي كه شما مي خواين از درون Project1.RES بيرون بياريد (Anti.exe) حجمش حدود 5 مگابايت هست. به اين توجه كنيد كه حجم كمي نيست!
طبق دستورات بالا، خط سوم وظيفه واكشي فايل از Resource رو داره. وقتي دستور اجرا ميشه اين وظيفه سيستم عامل هست كه فايل رو در محل موردنظر ذخيره كنه. و در همين حين به دستور بعد يعني Close #1 مي رسيم. حالا فايل Anti.exe نصفه نيمه كپي شده به خاطر حجم بالاي فايل و سرعت زياد اجراي دستورات.
اگر برنامه رو خط به خط اجرا كنيد متوجه اين موضوع خواهيد شد.
اما چاره چيست؟
فرصت دادن به سيستم عامل براي انجام كارهاي محول شده بهش. با استفاده از تابع Sleep:
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
قبل از دستور Close با توجه به حجم فايل يك عددي برحسب ميلي ثانيه به تابع بديد. به همون ميزان مثلاً 3 ثانيه سيستم عامل كار خودش رو انجام ميده و دستور بعدي اجرا نميشه، پس فايل به طور كامل نوشته ميشه و بعد بسته ميشه.
پيشنهاد مي كنم بجاي استفاده از پروگرس بارهاي نمايشي، value پروگرس بار رو به اين جور كارها نسبت بديد.
MANIFEST رو هم با نام MNIFEST گذاشتيد تو res فايل. تو برنامه هم بنويسيد MNIFEST چون Error ميده. يا resfile رو اصلاح كنيد.
موفق باشيد/