2012-09-20 28 views
10

Dự án của tôi là một ứng dụng C++ độc lập sử dụng FMOD để phát âm thanh. Trước đây tôi đã phát triển cùng một dự án với Visual Studio 2010 mà không gặp bất kỳ sự cố nào, nhưng năm 2012 mang lại cho tôi lỗi cổ điển: "Chương trình không thể khởi động vì fmodex.dll bị thiếu trong máy tính của bạn. Hãy thử cài đặt lại chương trình để khắc phục sự cố này. " Dự án dường như tải các DLL khác (chẳng hạn như các tệp liên quan đến Direct3d và trình biên dịch bóng đổ d3d).Không phụ thuộc vào DLL khi gỡ lỗi với Visual Studio 11 RC

Sự cố chỉ xảy ra nếu cố gắng gỡ lỗi hoặc chạy chương trình từ IDE, không phải nếu tôi sao chép tệp thi hành vào thư mục thích hợp với DLL và chạy thủ công. Nếu tôi loại bỏ tất cả các tham chiếu đến FMOD từ chương trình, việc gỡ lỗi và chạy hoạt động tốt. Tôi đã chắc chắn rằng tôi có thư mục làm việc chính xác trong cài đặt dự án (bên cạnh nó tải tất cả các tập tin khác chỉ tốt trong cùng một thư mục). Ban đầu tôi đã chuyển đổi dự án từ Visual Studio 2010, nhưng cố gắng tạo một dự án mới từ đầu mà không có may mắn. Tôi cũng đã sửa đổi tất cả các cài đặt trình biên dịch và liên kết có thể thông qua, và googling dường như không giúp được gì.

Tôi đoán rằng sự cố có liên quan đến ứng dụng kiểu Metro mới và đó là cách xử lý các phụ thuộc bên ngoài, nhưng tôi cũng đã tắt "Hỗ trợ ứng dụng kiểu Metro". Tôi bắt đầu nghĩ rằng tôi đã thực sự cố gắng tất cả mọi thứ tôi có thể và không có ý tưởng gì để cố gắng tiếp theo. Chỉ dẫn để nhận thêm thông tin chẩn đoán cũng sẽ được đánh giá cao! Cảm ơn!

Edit: Visual Studio phiên bản tôi đang sử dụng là Visual Studio Ultimate 2012 RC, phiên bản 11.0.50706.0 QRELRC Tháng Bảy, 2012

+0

Như thường lệ với các vấn đề DLL, _have bạn đã cố gắng phụ thuộc Walker_? Đặc biệt, chế độ lược tả? – MSalters

Trả lời

16

Đến thuộc tính của dự án:

Configuration Properties | Debugging | Environment 

Và thêm mục sau:

PATH=c:\path\where\the\dll-is;$(Path) 
+0

Âm thanh như thế này có thể là nó! Phải cố gắng khi tôi trở về nhà từ công việc! – hhatinen

+0

Tuyệt vời! Điều đó đóng đinh vấn đề. Cảm ơn bạn! – hhatinen

+0

Điều đó sẽ cho phép bạn chạy chương trình trong trình gỡ rối, nhưng nó không khắc phục được sự cố rằng chương trình không tìm kiếm các tệp DLL của nó đúng cách. tức là nếu ai đó chạy chương trình với thư mục hiện tại được đặt ở một nơi khác, nó cũng sẽ thất bại đối với họ. (Thông thường, nếu bạn chạy chương trình thông qua một dấu nhắc lệnh, ví dụ.) –

0

Nó có thể là VS đang chạy các ứng dụng với một thư mục hiện hành khác nhau để khi bạn chạy ứng dụng bằng tay.

VS thường đặt thư mục hiện tại vào thư mục dự án, thường không giống với thư mục chứa tệp nhị phân được tạo. Khi bạn chạy nó bằng tay bạn có thể chạy nó từ sau này, không phải là trước đây. Nếu đó là vấn đề thì mã tải fmodex.dll phải phụ thuộc vào thư mục hiện tại nằm trong đường dẫn tìm kiếm DLL, điều này có thể là một nguy cơ bảo mật lớn (tra cứu "DLL build" hoặc DLL "pre-loading" (tải trước).) và được chủ động chặn bởi một số cấu hình Windows.

+0

Thư mục hiện tại sẽ ổn (nếu bạn ngụ ý thư mục làm việc trong cài đặt dự án). Nhưng bạn có thể ở ngay đó, rằng trình gỡ rối dường như chủ động ngăn chương trình tải DLL từ thư mục hiện tại. Tôi đã tiếp tục thử một cái gì đó thậm chí là quyết liệt hơn để sao chép các fmodex.dll vào thư mục System32 địa phương của tôi, và chương trình dường như bắt đầu tốt. – hhatinen

2

Đồng cảm của tôi, tôi sống ở địa ngục DLL rất nhiều gần đây có vẻ như vậy. Hai gợi ý:

  1. Bạn có thể lái xe IDE từ dòng lệnh với devenv trong đó có một công tắc /useenv.

    "... Use PATH, INCLUDE, LIBPATH, and LIB environment variables instead of IDE paths for VC++ builds.

  2. dumpbin /dependents [*.exe] [*.dll] sẽ hiển thị cho bạn phụ thuộc DLL.

    dumpbin /dependents openssl.exe

Microsoft (R) COFF/PE Dumper Version 10.00.40219.01 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file openssl.exe

File Type: EXECUTABLE IMAGE

Image has the following dependencies:

SSLEAY32.dll 
LIBEAY32.dll 
WSOCK32.dll 
MSVCR80.dll 
KERNEL32.dll 

Summary 

    4000 .data 
    14000 .rdata 
    1000 .rsrc 
    33000 .text 
+0

Chuyển đổi/useenv dường như làm cho VS không mở dự án được. Nó xuất ra sau lỗi cho mỗi dự án: 'F: \ Program Files \ MSBuild \ Microsoft.Cpp \ v4.0 \ V110 \ Microsoft.Cpp.Common.props (63,3): Dự án được nhập khẩu" G: \ build \ CommonConfiguration \ Neutral \ sdk.props "không tìm thấy. Xác nhận rằng đường dẫn trong khai báo là chính xác và tệp tồn tại trên đĩa.' (F là đĩa nơi studio trực quan và G trong đó dự án là, không có thư mục G: \ build mặc dù ..). – hhatinen

Các vấn đề liên quan