Browse Source

Added missing include for sockets. Android http streams. Minor fix for ActiveX.

tags/2021-05-28
Julian Storer 14 years ago
parent
commit
6e76ba29ab
16 changed files with 179 additions and 117 deletions
  1. +13
    -0
      extras/Jucer (experimental)/Source/Project/jucer_ProjectExport_Android.h
  2. +1
    -0
      extras/Jucer (experimental)/Source/Utility/jucer_PresetIDs.h
  3. +2
    -2
      extras/browser plugins/wrapper/juce_ActiveX_GlueCode.cpp
  4. +50
    -52
      juce_amalgamated.cpp
  5. +1
    -1
      juce_amalgamated.h
  6. +1
    -1
      src/audio/audio_file_formats/juce_AudioThumbnail.cpp
  7. +1
    -1
      src/core/juce_StandardHeader.h
  8. +1
    -0
      src/io/network/juce_Socket.cpp
  9. +59
    -8
      src/native/android/java/JuceAppActivity.java
  10. +41
    -43
      src/native/android/juce_android_Network.cpp
  11. +1
    -1
      src/native/windows/juce_win32_FileChooser.cpp
  12. +2
    -2
      src/native/windows/juce_win32_Files.cpp
  13. +1
    -1
      src/native/windows/juce_win32_PlatformUtils.cpp
  14. +2
    -2
      src/native/windows/juce_win32_Threads.cpp
  15. +2
    -2
      src/native/windows/juce_win32_WebBrowserComponent.cpp
  16. +1
    -1
      src/native/windows/juce_win32_Windowing.cpp

+ 13
- 0
extras/Jucer (experimental)/Source/Project/jucer_ProjectExport_Android.h View File

@@ -59,6 +59,9 @@ public:
if (getNDKPath().toString().isEmpty())
getNDKPath() = "${user.home}/SDKs/android-ndk-r5";
if (getInternetNeeded().toString().isEmpty())
getInternetNeeded() = true;
}
//==============================================================================
@@ -87,10 +90,14 @@ public:
props.add (new TextPropertyComponent (getNDKPath(), "Android NDK Path", 1024, false));
props.getLast()->setTooltip ("The path to the Android NDK folder on the target build machine");
props.add (new BooleanPropertyComponent (getInternetNeeded(), "Internet Access", "Specify internet access permission in the manifest"));
props.getLast()->setTooltip ("If enabled, this will set the android.permission.INTERNET flag in the manifest.");
}
Value getSDKPath() const { return getSetting (Ids::androidSDKPath); }
Value getNDKPath() const { return getSetting (Ids::androidNDKPath); }
Value getInternetNeeded() const { return getSetting (Ids::androidInternetNeeded); }
//==============================================================================
void create()
@@ -149,6 +156,12 @@ private:
screens->setAttribute ("android:xlargeScreens", "true");
screens->setAttribute ("android:anyDensity", "true");
if (getInternetNeeded().getValue())
{
XmlElement* permission = manifest->createNewChildElement ("uses-permission");
permission->setAttribute ("android:name", "android.permission.INTERNET");
}
XmlElement* app = manifest->createNewChildElement ("application");
app->setAttribute ("android:label", "@string/app_name");
app->setAttribute ("android:icon", "@drawable/icon");


+ 1
- 0
extras/Jucer (experimental)/Source/Utility/jucer_PresetIDs.h View File

@@ -115,6 +115,7 @@ namespace Ids
DECLARE_ID (hidden);
DECLARE_ID (androidSDKPath);
DECLARE_ID (androidNDKPath);
DECLARE_ID (androidInternetNeeded);
const Identifier class_ ("class");
const Identifier id_ ("id");


+ 2
- 2
extras/browser plugins/wrapper/juce_ActiveX_GlueCode.cpp View File

@@ -148,9 +148,9 @@ public:
private:
StringPool identifierPool;
static DISPID getHashFromString (const juce_wchar* s) throw()
static DISPID getHashFromString (const String::CharPointerType& s) throw()
{
return (DISPID) (pointer_sized_int) s;
return (DISPID) (pointer_sized_int) s.getAddress();
}
IDispatchHelper (const IDispatchHelper&);


+ 50
- 52
juce_amalgamated.cpp View File

@@ -22240,7 +22240,7 @@ int AudioThumbnail::getNumChannels() const throw()

double AudioThumbnail::getTotalLength() const throw()
{
return totalSamples / sampleRate;
return sampleRate > 0 ? (totalSamples / sampleRate) : 0;
}

bool AudioThumbnail::isFullyLoaded() const throw()
@@ -242738,13 +242738,13 @@ public:
: handle (0), refCount (1)
{
name = name.replaceCharacter ('\\', '/');
handle = CreateMutexW (0, TRUE, ("Global\\" + name).toUTF16().getAddress());
handle = CreateMutexW (0, TRUE, ("Global\\" + name).toWideCharPointer());

// Not 100% sure why a global mutex sometimes can't be allocated, but if it fails, fall back to
// a local one. (A local one also sometimes fails on other machines so neither type appears to be
// universally reliable)
if (handle == 0)
handle = CreateMutexW (0, TRUE, ("Local\\" + name).toUTF16().getAddress());
handle = CreateMutexW (0, TRUE, ("Local\\" + name).toWideCharPointer());

if (handle != 0 && GetLastError() == ERROR_ALREADY_EXISTS)
{
@@ -242865,7 +242865,7 @@ namespace WindowsFileHelpers
{
// (mess with the string to make sure it's not sharing its internal storage)
path = (path + " ").dropLastCharacters(1);
WCHAR* p = const_cast <WCHAR*> (path.toUTF16().getAddress());
WCHAR* p = const_cast <WCHAR*> (path.toWideCharPointer());

if (PathStripToRoot (p))
return String ((const WCHAR*) p);
@@ -242974,7 +242974,7 @@ bool File::moveToTrash() const

// The string we pass in must be double null terminated..
String doubleNullTermPath (getFullPathName() + " ");
WCHAR* const p = const_cast <WCHAR*> (doubleNullTermPath.toUTF16().getAddress());
WCHAR* const p = const_cast <WCHAR*> (doubleNullTermPath.toWideCharPointer());
p [getFullPathName().length()] = 0;

fos.wFunc = FO_DELETE;
@@ -244205,7 +244205,7 @@ void PlatformUtilities::setRegistryValue (const String& regValuePath,
if (k != 0)
{
RegSetValueEx (k, valueName.toUTF16(), 0, REG_SZ,
(const BYTE*) value.toUTF16().getAddress(),
(const BYTE*) value.toWideCharPointer(),
CharPointer_UTF16::getBytesRequiredFor (value.getCharPointer()));

RegCloseKey (k);
@@ -248390,7 +248390,7 @@ const Image juce_createIconForFile (const File& file)
WORD iconNum = 0;

HICON icon = ExtractAssociatedIcon ((HINSTANCE) PlatformUtilities::getCurrentModuleInstanceHandle(),
const_cast <WCHAR*> (file.getFullPathName().toUTF16().getAddress()), &iconNum);
const_cast <WCHAR*> (file.getFullPathName().toWideCharPointer()), &iconNum);

if (icon != 0)
{
@@ -248807,7 +248807,7 @@ namespace FileChooserHelpers
FileChooserCallbackInfo* info = (FileChooserCallbackInfo*) lpData;

if (msg == BFFM_INITIALIZED)
SendMessage (hWnd, BFFM_SETSELECTIONW, TRUE, (LPARAM) info->initialPath.toUTF16().getAddress());
SendMessage (hWnd, BFFM_SETSELECTIONW, TRUE, (LPARAM) info->initialPath.toWideCharPointer());
else if (msg == BFFM_VALIDATEFAILEDW)
info->returnedString = (LPCWSTR) lParam;
else if (msg == BFFM_VALIDATEFAILEDA)
@@ -250013,7 +250013,7 @@ public:
if (headers != 0)
{
V_VT (&headersVar) = VT_BSTR;
V_BSTR (&headersVar) = SysAllocString ((const OLECHAR*) headers->joinIntoString ("\r\n").toUTF16().getAddress());
V_BSTR (&headersVar) = SysAllocString ((const OLECHAR*) headers->joinIntoString ("\r\n").toWideCharPointer());
}

if (postData != 0 && postData->getSize() > 0)
@@ -250041,7 +250041,7 @@ public:
}
}

browser->Navigate ((BSTR) (const OLECHAR*) url.toUTF16().getAddress(),
browser->Navigate ((BSTR) (const OLECHAR*) url.toWideCharPointer(),
&flags, &frame,
&postDataVar, &headersVar);

@@ -285405,80 +285405,78 @@ class WebInputStream : public InputStream
{
public:

WebInputStream (const String& address, bool isPost, const MemoryBlock& postData,
WebInputStream (String address, bool isPost, const MemoryBlock& postData,
URL::OpenStreamProgressCallback* progressCallback, void* progressCallbackContext,
const String& headers, int timeOutMs, StringPairArray* responseHeaders)
{
if (! address.contains ("://"))
address = "http://" + address;

JNIEnv* env = getEnv();

jbyteArray postDataArray = 0;

if (postData.getSize() > 0)
{
postDataArray = getEnv()->NewByteArray (postData.getSize());
getEnv()->SetByteArrayRegion (postDataArray, 0, postData.getSize(), (const jbyte*) postData.getData());
postDataArray = env->NewByteArray (postData.getSize());
env->SetByteArrayRegion (postDataArray, 0, postData.getSize(), (const jbyte*) postData.getData());
}

LocalRef<jobject> responseHeaderBuffer (getEnv()->NewObject (android.stringBufferClass, android.stringBufferConstructor));
LocalRef<jobject> responseHeaderBuffer (env->NewObject (android.stringBufferClass, android.stringBufferConstructor));

stream = GlobalRef (android.activity.callObjectMethod (android.createHTTPStream,
javaString (address).get(),
(jboolean) isPost,
postDataArray,
javaString (headers).get(),
(jint) timeOutMs,
responseHeaderBuffer.get()));
stream = GlobalRef (env->CallStaticObjectMethod (android.activityClass,
android.createHTTPStream,
javaString (address).get(),
(jboolean) isPost,
postDataArray,
javaString (headers).get(),
(jint) timeOutMs,
responseHeaderBuffer.get()));

getEnv()->DeleteLocalRef (postDataArray);
if (postDataArray != 0)
env->DeleteLocalRef (postDataArray);

if (stream != 0)
{
StringArray headerLines;

{
LocalRef<jstring> headersString ((jstring) getEnv()->CallObjectMethod (responseHeaderBuffer.get(),
android.stringBufferToString));
LocalRef<jstring> headersString ((jstring) env->CallObjectMethod (responseHeaderBuffer.get(),
android.stringBufferToString));
headerLines.addLines (juceString (headersString));
}

for (int i = 0; i < headerLines.size(); ++i)
if (responseHeaders != 0)
{
const String& header = headerLines[i];
const String key (header.upToFirstOccurrenceOf (": ", false, false));
const String value (header.fromFirstOccurrenceOf (": ", false, false));
const String previousValue ((*responseHeaders) [key]);
for (int i = 0; i < headerLines.size(); ++i)
{
const String& header = headerLines[i];
const String key (header.upToFirstOccurrenceOf (": ", false, false));
const String value (header.fromFirstOccurrenceOf (": ", false, false));
const String previousValue ((*responseHeaders) [key]);

responseHeaders->set (key, previousValue.isEmpty() ? value : (previousValue + "," + value));
responseHeaders->set (key, previousValue.isEmpty() ? value : (previousValue + "," + value));
}
}

}
}

~WebInputStream()
{
stream.callVoidMethod (android.httpStreamRelease);
}

bool isExhausted()
{
return stream != 0 && stream.callBooleanMethod (android.isExhausted);
}

int64 getPosition()
{
return stream != 0 ? stream.callLongMethod (android.getPosition) : 0;
}

int64 getTotalLength()
{
return stream != 0 ? stream.callLongMethod (android.getTotalLength) : 0;
if (stream != 0)
stream.callVoidMethod (android.httpStreamRelease);
}

bool setPosition (int64 wantedPos)
{
return stream != 0 && stream.callBooleanMethod (android.setPosition, (jlong) wantedPos);
}
bool isExhausted() { return stream != 0 && stream.callBooleanMethod (android.isExhausted); }
int64 getTotalLength() { return stream != 0 ? stream.callLongMethod (android.getTotalLength) : 0; }
int64 getPosition() { return stream != 0 ? stream.callLongMethod (android.getPosition) : 0; }
bool setPosition (int64 wantedPos) { return stream != 0 && stream.callBooleanMethod (android.setPosition, (jlong) wantedPos); }

int read (void* buffer, int bytesToRead)
{
if (stream == 0)
return 0;

JNIEnv* env = getEnv();

jbyteArray javaArray = env->NewByteArray (bytesToRead);
@@ -285486,7 +285484,7 @@ public:
int numBytes = stream.callIntMethod (android.httpStreamRead, javaArray, (jint) bytesToRead);

if (numBytes > 0)
env->GetByteArrayRegion (javaArray, 0, numBytes, (jbyte*) buffer);
env->GetByteArrayRegion (javaArray, 0, numBytes, static_cast <jbyte*> (buffer));

env->DeleteLocalRef (javaArray);
return numBytes;


+ 1
- 1
juce_amalgamated.h View File

@@ -73,7 +73,7 @@ namespace JuceDummyNamespace {}
*/
#define JUCE_MAJOR_VERSION 1
#define JUCE_MINOR_VERSION 53
#define JUCE_BUILDNUMBER 45
#define JUCE_BUILDNUMBER 46

/** Current Juce version number.



+ 1
- 1
src/audio/audio_file_formats/juce_AudioThumbnail.cpp View File

@@ -720,7 +720,7 @@ int AudioThumbnail::getNumChannels() const throw()
double AudioThumbnail::getTotalLength() const throw()
{
return totalSamples / sampleRate;
return sampleRate > 0 ? (totalSamples / sampleRate) : 0;
}
bool AudioThumbnail::isFullyLoaded() const throw()


+ 1
- 1
src/core/juce_StandardHeader.h View File

@@ -33,7 +33,7 @@
*/
#define JUCE_MAJOR_VERSION 1
#define JUCE_MINOR_VERSION 53
#define JUCE_BUILDNUMBER 45
#define JUCE_BUILDNUMBER 46
/** Current Juce version number.


+ 1
- 0
src/io/network/juce_Socket.cpp View File

@@ -60,6 +60,7 @@ BEGIN_JUCE_NAMESPACE
#include "juce_Socket.h"
#include "../../threads/juce_ScopedLock.h"
#include "../../threads/juce_Thread.h"
#include "../../utilities/juce_DeletedAtShutdown.h"
#if JUCE_WINDOWS
typedef int juce_socklen_t;


+ 59
- 8
src/native/android/java/JuceAppActivity.java View File

@@ -38,8 +38,12 @@ import android.graphics.RectF;
import android.graphics.Rect;
import android.text.ClipboardManager;
import com.juce.ComponentPeerView;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.HttpURLConnection;
//==============================================================================
public final class JuceAppActivity extends Activity
@@ -201,27 +205,49 @@ public final class JuceAppActivity extends Activity
//==============================================================================
public static class HTTPStream
{
public HTTPStream()
public HTTPStream (HttpURLConnection connection_) throws IOException
{
connection = connection_;
inputStream = new BufferedInputStream (connection.getInputStream());
}
public final void release()
{
try
{
inputStream.close();
}
catch (IOException e)
{}
connection.disconnect();
}
public final int read (byte[] buffer, int numBytes)
{
return 0;
int num = 0;
try
{
num = inputStream.read (buffer, 0, numBytes);
}
catch (IOException e)
{}
if (num > 0)
position += num;
return num;
}
public final long getPosition()
{
return 0;
return position;
}
public final long getTotalLength()
{
return 0;
return -1;
}
public final boolean isExhausted()
@@ -233,6 +259,10 @@ public final class JuceAppActivity extends Activity
{
return false;
}
private HttpURLConnection connection;
private InputStream inputStream;
private long position;
}
public static final HTTPStream createHTTPStream (String address, boolean isPost, byte[] postData,
@@ -240,11 +270,32 @@ public final class JuceAppActivity extends Activity
{
try
{
URL u = new URL (address);
HttpURLConnection connection = (HttpURLConnection) (new URL (address).openConnection());
return new HTTPStream ();
if (connection != null)
{
try
{
if (isPost)
{
connection.setConnectTimeout (timeOutMs);
connection.setDoOutput (true);
connection.setChunkedStreamingMode (0);
OutputStream out = connection.getOutputStream();
out.write (postData);
out.flush();
}
return new HTTPStream (connection);
}
catch (Throwable e)
{
connection.disconnect();
}
}
}
catch (java.net.MalformedURLException e)
catch (Throwable e)
{}
return null;


+ 41
- 43
src/native/android/juce_android_Network.cpp View File

@@ -51,81 +51,79 @@ class WebInputStream : public InputStream
{
public:
//==============================================================================
WebInputStream (const String& address, bool isPost, const MemoryBlock& postData,
WebInputStream (String address, bool isPost, const MemoryBlock& postData,
URL::OpenStreamProgressCallback* progressCallback, void* progressCallbackContext,
const String& headers, int timeOutMs, StringPairArray* responseHeaders)
{
if (! address.contains ("://"))
address = "http://" + address;
JNIEnv* env = getEnv();
jbyteArray postDataArray = 0;
if (postData.getSize() > 0)
{
postDataArray = getEnv()->NewByteArray (postData.getSize());
getEnv()->SetByteArrayRegion (postDataArray, 0, postData.getSize(), (const jbyte*) postData.getData());
postDataArray = env->NewByteArray (postData.getSize());
env->SetByteArrayRegion (postDataArray, 0, postData.getSize(), (const jbyte*) postData.getData());
}
LocalRef<jobject> responseHeaderBuffer (getEnv()->NewObject (android.stringBufferClass, android.stringBufferConstructor));
LocalRef<jobject> responseHeaderBuffer (env->NewObject (android.stringBufferClass, android.stringBufferConstructor));
stream = GlobalRef (android.activity.callObjectMethod (android.createHTTPStream,
javaString (address).get(),
(jboolean) isPost,
postDataArray,
javaString (headers).get(),
(jint) timeOutMs,
responseHeaderBuffer.get()));
stream = GlobalRef (env->CallStaticObjectMethod (android.activityClass,
android.createHTTPStream,
javaString (address).get(),
(jboolean) isPost,
postDataArray,
javaString (headers).get(),
(jint) timeOutMs,
responseHeaderBuffer.get()));
getEnv()->DeleteLocalRef (postDataArray);
if (postDataArray != 0)
env->DeleteLocalRef (postDataArray);
if (stream != 0)
{
StringArray headerLines;
{
LocalRef<jstring> headersString ((jstring) getEnv()->CallObjectMethod (responseHeaderBuffer.get(),
android.stringBufferToString));
LocalRef<jstring> headersString ((jstring) env->CallObjectMethod (responseHeaderBuffer.get(),
android.stringBufferToString));
headerLines.addLines (juceString (headersString));
}
for (int i = 0; i < headerLines.size(); ++i)
if (responseHeaders != 0)
{
const String& header = headerLines[i];
const String key (header.upToFirstOccurrenceOf (": ", false, false));
const String value (header.fromFirstOccurrenceOf (": ", false, false));
const String previousValue ((*responseHeaders) [key]);
responseHeaders->set (key, previousValue.isEmpty() ? value : (previousValue + "," + value));
for (int i = 0; i < headerLines.size(); ++i)
{
const String& header = headerLines[i];
const String key (header.upToFirstOccurrenceOf (": ", false, false));
const String value (header.fromFirstOccurrenceOf (": ", false, false));
const String previousValue ((*responseHeaders) [key]);
responseHeaders->set (key, previousValue.isEmpty() ? value : (previousValue + "," + value));
}
}
}
}
~WebInputStream()
{
stream.callVoidMethod (android.httpStreamRelease);
if (stream != 0)
stream.callVoidMethod (android.httpStreamRelease);
}
//==============================================================================
bool isExhausted()
{
return stream != 0 && stream.callBooleanMethod (android.isExhausted);
}
int64 getPosition()
{
return stream != 0 ? stream.callLongMethod (android.getPosition) : 0;
}
int64 getTotalLength()
{
return stream != 0 ? stream.callLongMethod (android.getTotalLength) : 0;
}
bool setPosition (int64 wantedPos)
{
return stream != 0 && stream.callBooleanMethod (android.setPosition, (jlong) wantedPos);
}
bool isExhausted() { return stream != 0 && stream.callBooleanMethod (android.isExhausted); }
int64 getTotalLength() { return stream != 0 ? stream.callLongMethod (android.getTotalLength) : 0; }
int64 getPosition() { return stream != 0 ? stream.callLongMethod (android.getPosition) : 0; }
bool setPosition (int64 wantedPos) { return stream != 0 && stream.callBooleanMethod (android.setPosition, (jlong) wantedPos); }
int read (void* buffer, int bytesToRead)
{
if (stream == 0)
return 0;
JNIEnv* env = getEnv();
jbyteArray javaArray = env->NewByteArray (bytesToRead);
@@ -133,7 +131,7 @@ public:
int numBytes = stream.callIntMethod (android.httpStreamRead, javaArray, (jint) bytesToRead);
if (numBytes > 0)
env->GetByteArrayRegion (javaArray, 0, numBytes, (jbyte*) buffer);
env->GetByteArrayRegion (javaArray, 0, numBytes, static_cast <jbyte*> (buffer));
env->DeleteLocalRef (javaArray);
return numBytes;


+ 1
- 1
src/native/windows/juce_win32_FileChooser.cpp View File

@@ -56,7 +56,7 @@ namespace FileChooserHelpers
FileChooserCallbackInfo* info = (FileChooserCallbackInfo*) lpData;
if (msg == BFFM_INITIALIZED)
SendMessage (hWnd, BFFM_SETSELECTIONW, TRUE, (LPARAM) info->initialPath.toUTF16().getAddress());
SendMessage (hWnd, BFFM_SETSELECTIONW, TRUE, (LPARAM) info->initialPath.toWideCharPointer());
else if (msg == BFFM_VALIDATEFAILEDW)
info->returnedString = (LPCWSTR) lParam;
else if (msg == BFFM_VALIDATEFAILEDA)


+ 2
- 2
src/native/windows/juce_win32_Files.cpp View File

@@ -60,7 +60,7 @@ namespace WindowsFileHelpers
{
// (mess with the string to make sure it's not sharing its internal storage)
path = (path + " ").dropLastCharacters(1);
WCHAR* p = const_cast <WCHAR*> (path.toUTF16().getAddress());
WCHAR* p = const_cast <WCHAR*> (path.toWideCharPointer());
if (PathStripToRoot (p))
return String ((const WCHAR*) p);
@@ -173,7 +173,7 @@ bool File::moveToTrash() const
// The string we pass in must be double null terminated..
String doubleNullTermPath (getFullPathName() + " ");
WCHAR* const p = const_cast <WCHAR*> (doubleNullTermPath.toUTF16().getAddress());
WCHAR* const p = const_cast <WCHAR*> (doubleNullTermPath.toWideCharPointer());
p [getFullPathName().length()] = 0;
fos.wFunc = FO_DELETE;


+ 1
- 1
src/native/windows/juce_win32_PlatformUtils.cpp View File

@@ -105,7 +105,7 @@ void PlatformUtilities::setRegistryValue (const String& regValuePath,
if (k != 0)
{
RegSetValueEx (k, valueName.toUTF16(), 0, REG_SZ,
(const BYTE*) value.toUTF16().getAddress(),
(const BYTE*) value.toWideCharPointer(),
CharPointer_UTF16::getBytesRequiredFor (value.getCharPointer()));
RegCloseKey (k);


+ 2
- 2
src/native/windows/juce_win32_Threads.cpp View File

@@ -349,13 +349,13 @@ public:
: handle (0), refCount (1)
{
name = name.replaceCharacter ('\\', '/');
handle = CreateMutexW (0, TRUE, ("Global\\" + name).toUTF16().getAddress());
handle = CreateMutexW (0, TRUE, ("Global\\" + name).toWideCharPointer());
// Not 100% sure why a global mutex sometimes can't be allocated, but if it fails, fall back to
// a local one. (A local one also sometimes fails on other machines so neither type appears to be
// universally reliable)
if (handle == 0)
handle = CreateMutexW (0, TRUE, ("Local\\" + name).toUTF16().getAddress());
handle = CreateMutexW (0, TRUE, ("Local\\" + name).toWideCharPointer());
if (handle != 0 && GetLastError() == ERROR_ALREADY_EXISTS)
{


+ 2
- 2
src/native/windows/juce_win32_WebBrowserComponent.cpp View File

@@ -90,7 +90,7 @@ public:
if (headers != 0)
{
V_VT (&headersVar) = VT_BSTR;
V_BSTR (&headersVar) = SysAllocString ((const OLECHAR*) headers->joinIntoString ("\r\n").toUTF16().getAddress());
V_BSTR (&headersVar) = SysAllocString ((const OLECHAR*) headers->joinIntoString ("\r\n").toWideCharPointer());
}
if (postData != 0 && postData->getSize() > 0)
@@ -118,7 +118,7 @@ public:
}
}
browser->Navigate ((BSTR) (const OLECHAR*) url.toUTF16().getAddress(),
browser->Navigate ((BSTR) (const OLECHAR*) url.toWideCharPointer(),
&flags, &frame,
&postDataVar, &headersVar);


+ 1
- 1
src/native/windows/juce_win32_Windowing.cpp View File

@@ -2596,7 +2596,7 @@ const Image juce_createIconForFile (const File& file)
WORD iconNum = 0;
HICON icon = ExtractAssociatedIcon ((HINSTANCE) PlatformUtilities::getCurrentModuleInstanceHandle(),
const_cast <WCHAR*> (file.getFullPathName().toUTF16().getAddress()), &iconNum);
const_cast <WCHAR*> (file.getFullPathName().toWideCharPointer()), &iconNum);
if (icon != 0)
{


Loading…
Cancel
Save