// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file contains utility functions for accessing resources in external
// files (DLLs) or embedded in the executable itself.

#ifndef BASE_WIN_RESOURCE_UTIL_H_
#define BASE_WIN_RESOURCE_UTIL_H_

#include <windows.h>
#include <stddef.h>

#include "base/base_export.h"

namespace base {
namespace win {

// Function for getting a data resource of the specified |resource_type| from
// a dll.  Some resources are optional, especially in unit tests, so this
// returns false but doesn't raise an error if the resource can't be loaded.
bool BASE_EXPORT GetResourceFromModule(HMODULE module,
                                       int resource_id,
                                       LPCTSTR resource_type,
                                       void** data,
                                       size_t* length);

// Function for getting a data resource (BINDATA) from a dll.  Some
// resources are optional, especially in unit tests, so this returns false
// but doesn't raise an error if the resource can't be loaded.
bool BASE_EXPORT GetDataResourceFromModule(HMODULE module,
                                           int resource_id,
                                           void** data,
                                           size_t* length);

}  // namespace win
}  // namespace base

#endif  // BASE_WIN_RESOURCE_UTIL_H_
