Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-1.1
Commits
ebf11a99
Commit
ebf11a99
authored
Jan 31, 2007
by
Damien Fouilleul
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- activex: globally use win32 unicode APIs, hopefully this will fix reported registration problems
parent
560b07b4
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
97 additions
and
126 deletions
+97
-126
activex/main.cpp
activex/main.cpp
+68
-86
activex/plugin.cpp
activex/plugin.cpp
+27
-14
activex/plugin.h
activex/plugin.h
+1
-1
activex/utils.cpp
activex/utils.cpp
+0
-22
activex/utils.h
activex/utils.h
+0
-2
configure.ac
configure.ac
+1
-1
No files found.
activex/main.cpp
View file @
ebf11a99
...
...
@@ -29,6 +29,7 @@
#include <windows.h>
#include <shlwapi.h>
#include <tchar.h>
#include <guiddef.h>
using
namespace
std
;
...
...
@@ -80,10 +81,10 @@ STDAPI DllCanUnloadNow(VOID)
return
(
0
==
i_class_ref
)
?
S_OK
:
S_FALSE
;
};
static
inline
HKEY
keyCreate
(
HKEY
parentKey
,
LPCSTR
keyName
)
static
inline
HKEY
keyCreate
(
HKEY
parentKey
,
LPC
T
STR
keyName
)
{
HKEY
childKey
;
if
(
ERROR_SUCCESS
==
RegCreateKeyEx
A
(
parentKey
,
keyName
,
0
,
NULL
,
if
(
ERROR_SUCCESS
==
RegCreateKeyEx
(
parentKey
,
keyName
,
0
,
NULL
,
REG_OPTION_NON_VOLATILE
,
KEY_ALL_ACCESS
,
NULL
,
&
childKey
,
NULL
)
)
{
return
childKey
;
...
...
@@ -91,24 +92,24 @@ static inline HKEY keyCreate(HKEY parentKey, LPCSTR keyName)
return
NULL
;
};
static
inline
HKEY
keySet
(
HKEY
hKey
,
LPC
STR
valueName
,
const
void
*
s
,
size_t
len
)
static
inline
HKEY
keySet
(
HKEY
hKey
,
LPC
TSTR
valueName
,
const
void
*
s
,
size_t
len
,
DWORD
dwType
=
REG_SZ
)
{
if
(
NULL
!=
hKey
)
{
RegSetValueEx
A
(
hKey
,
valueName
,
0
,
REG_SZ
,
RegSetValueEx
(
hKey
,
valueName
,
0
,
dwType
,
(
const
BYTE
*
)
s
,
len
);
}
return
hKey
;
};
static
inline
HKEY
keySetDef
(
HKEY
hKey
,
const
void
*
s
,
size_t
len
)
static
inline
HKEY
keySetDef
(
HKEY
hKey
,
const
void
*
s
,
size_t
len
,
DWORD
dwType
=
REG_SZ
)
{
return
keySet
(
hKey
,
NULL
,
s
,
len
);
return
keySet
(
hKey
,
NULL
,
s
,
len
,
dwType
);
};
static
inline
HKEY
keySetDef
(
HKEY
hKey
,
LPCSTR
s
)
static
inline
HKEY
keySetDef
(
HKEY
hKey
,
LPC
T
STR
s
)
{
return
keySetDef
(
hKey
,
s
,
s
trlen
(
s
)
+
1
);
return
keySetDef
(
hKey
,
s
,
s
izeof
(
TCHAR
)
*
(
_tcslen
(
s
)
+
1
),
REG_SZ
);
};
static
inline
HKEY
keyClose
(
HKEY
hKey
)
...
...
@@ -122,23 +123,21 @@ static inline HKEY keyClose(HKEY hKey)
static
HRESULT
UnregisterProgID
(
REFCLSID
rclsid
,
unsigned
int
version
)
{
LPCSTR
psz_CLSID
=
CStrFromGUID
(
rclsid
)
;
OLECHAR
szCLSID
[
GUID_STRLEN
]
;
if
(
NULL
==
psz_CLSID
)
return
E_OUTOFMEMORY
;
StringFromGUID2
(
rclsid
,
szCLSID
,
GUID_STRLEN
);
char
progId
[
sizeof
(
PROGID_STR
)
+
16
];
sprintf
(
progId
,
"%s.%u"
,
PROGID_STR
,
version
);
TCHAR
progId
[
sizeof
(
PROGID_STR
)
+
16
];
_stprintf
(
progId
,
TEXT
(
"%s.%u"
),
TEXT
(
PROGID_STR
)
,
version
);
SHDeleteKey
A
(
HKEY_CLASSES_ROOT
,
progId
);
SHDeleteKey
(
HKEY_CLASSES_ROOT
,
progId
);
HKEY
hClsIDKey
;
if
(
ERROR_SUCCESS
==
RegOpenKeyEx
A
(
HKEY_CLASSES_ROOT
,
"CLSID"
,
0
,
KEY_WRITE
,
&
hClsIDKey
)
)
if
(
ERROR_SUCCESS
==
RegOpenKeyEx
(
HKEY_CLASSES_ROOT
,
TEXT
(
"CLSID"
)
,
0
,
KEY_WRITE
,
&
hClsIDKey
)
)
{
SHDeleteKey
(
hClsIDKey
,
psz_
CLSID
);
SHDeleteKey
(
hClsIDKey
,
sz
CLSID
);
RegCloseKey
(
hClsIDKey
);
}
CoTaskMemFree
((
void
*
)
psz_CLSID
);
};
STDAPI
DllUnregisterServer
(
VOID
)
...
...
@@ -173,20 +172,19 @@ STDAPI DllUnregisterServer(VOID)
return
S_OK
;
};
static
HRESULT
RegisterClassID
(
HKEY
hParent
,
REFCLSID
rclsid
,
unsigned
int
version
,
BOOL
isDefault
,
const
char
*
path
,
size_t
pathLen
)
static
HRESULT
RegisterClassID
(
HKEY
hParent
,
REFCLSID
rclsid
,
unsigned
int
version
,
BOOL
isDefault
,
LPCTSTR
path
,
size_t
pathLen
)
{
char
progId
[
sizeof
(
PROGID_STR
)
+
16
];
sprintf
(
progId
,
"%s.%u"
,
PROGID_STR
,
version
);
TCHAR
progId
[
sizeof
(
PROGID_STR
)
+
16
];
_stprintf
(
progId
,
TEXT
(
"%s.%u"
),
TEXT
(
PROGID_STR
)
,
version
);
char
description
[
sizeof
(
DESCRIPTION
)
+
16
];
sprintf
(
description
,
"%s v%u"
,
DESCRIPTION
,
version
);
TCHAR
description
[
sizeof
(
DESCRIPTION
)
+
16
];
_stprintf
(
description
,
TEXT
(
"%s v%u"
),
TEXT
(
DESCRIPTION
)
,
version
);
HKEY
hClassKey
;
{
LPCSTR
psz_CLSID
=
CStrFromGUID
(
rclsid
)
;
OLECHAR
szCLSID
[
GUID_STRLEN
]
;
if
(
NULL
==
psz_CLSID
)
return
E_OUTOFMEMORY
;
StringFromGUID2
(
rclsid
,
szCLSID
,
GUID_STRLEN
);
HKEY
hProgKey
=
keyCreate
(
HKEY_CLASSES_ROOT
,
progId
);
if
(
NULL
!=
hProgKey
)
...
...
@@ -194,9 +192,9 @@ static HRESULT RegisterClassID(HKEY hParent, REFCLSID rclsid, unsigned int versi
// default key value
keySetDef
(
hProgKey
,
description
);
keyClose
(
keySetDef
(
keyCreate
(
hProgKey
,
"CLSID"
),
psz_
CLSID
,
GUID_STRLEN
));
keyClose
(
keySetDef
(
keyCreate
(
hProgKey
,
TEXT
(
"CLSID"
)
),
sz
CLSID
,
sizeof
(
szCLSID
)
));
//hSubKey = keyClose(keyCreate(hBaseKey, "Insertable"));
...
...
@@ -204,22 +202,21 @@ static HRESULT RegisterClassID(HKEY hParent, REFCLSID rclsid, unsigned int versi
}
if
(
isDefault
)
{
hProgKey
=
keyCreate
(
HKEY_CLASSES_ROOT
,
PROGID_STR
);
hProgKey
=
keyCreate
(
HKEY_CLASSES_ROOT
,
TEXT
(
PROGID_STR
)
);
if
(
NULL
!=
hProgKey
)
{
// default key value
keySetDef
(
hProgKey
,
description
);
keyClose
(
keySetDef
(
keyCreate
(
hProgKey
,
"CLSID"
),
psz_
CLSID
,
GUID_STRLEN
));
keyClose
(
keySetDef
(
keyCreate
(
hProgKey
,
TEXT
(
"CLSID"
)
),
sz
CLSID
,
sizeof
(
szCLSID
)
));
keyClose
(
keySetDef
(
keyCreate
(
hProgKey
,
"CurVer"
),
keyClose
(
keySetDef
(
keyCreate
(
hProgKey
,
TEXT
(
"CurVer"
)
),
progId
));
}
}
hClassKey
=
keyCreate
(
hParent
,
psz_CLSID
);
CoTaskMemFree
((
void
*
)
psz_CLSID
);
hClassKey
=
keyCreate
(
hParent
,
szCLSID
);
}
if
(
NULL
!=
hClassKey
)
{
...
...
@@ -227,45 +224,45 @@ static HRESULT RegisterClassID(HKEY hParent, REFCLSID rclsid, unsigned int versi
keySetDef
(
hClassKey
,
description
);
// Control key value
keyClose
(
keyCreate
(
hClassKey
,
"Control"
));
keyClose
(
keyCreate
(
hClassKey
,
TEXT
(
"Control"
)
));
// Insertable key value
//keyClose(keyCreate(hClassKey,
"Insertable"
));
//keyClose(keyCreate(hClassKey,
TEXT("Insertable")
));
// ToolboxBitmap32 key value
{
char
iconPath
[
pathLen
+
3
];
memcpy
(
iconPath
,
path
,
pathLen
);
strcpy
(
iconPath
+
pathLen
,
",1"
);
TCHAR
iconPath
[
pathLen
+
3
];
memcpy
(
iconPath
,
path
,
sizeof
(
TCHAR
)
*
pathLen
);
_tcscpy
(
iconPath
+
pathLen
,
TEXT
(
",1"
)
);
keyClose
(
keySetDef
(
keyCreate
(
hClassKey
,
"ToolboxBitmap32"
),
TEXT
(
"ToolboxBitmap32"
)
),
iconPath
,
sizeof
(
iconPath
)));
}
#ifdef BUILD_LOCALSERVER
// LocalServer32 key value
keyClose
(
keySetDef
(
keyCreate
(
hClassKey
,
"LocalServer32"
,
path
,
pathLen
+
1
)));
TEXT
(
"LocalServer32"
),
path
,
sizeof
(
TCHAR
)
*
(
pathLen
+
1
)
)));
#else
// InprocServer32 key value
{
HKEY
hSubKey
=
keySetDef
(
keyCreate
(
hClassKey
,
"InprocServer32"
),
path
,
pathLen
+
1
);
TEXT
(
"InprocServer32"
)
),
path
,
sizeof
(
TCHAR
)
*
(
pathLen
+
1
)
);
keySet
(
hSubKey
,
"ThreadingModel"
,
T
HREADING_MODEL
,
sizeof
(
THREADING_MODEL
));
TEXT
(
"ThreadingModel"
)
,
T
EXT
(
THREADING_MODEL
),
sizeof
(
TEXT
(
THREADING_MODEL
)
));
keyClose
(
hSubKey
);
}
#endif
// MiscStatus key value
keyClose
(
keySetDef
(
keyCreate
(
hClassKey
,
"MiscStatus
\\
1"
),
MISC_STATUS
,
sizeof
(
MISC_STATUS
)));
TEXT
(
"MiscStatus
\\
1"
)
),
TEXT
(
MISC_STATUS
),
sizeof
(
TEXT
(
MISC_STATUS
)
)));
// Programmable key value
keyClose
(
keyCreate
(
hClassKey
,
"Programmable"
));
keyClose
(
keyCreate
(
hClassKey
,
TEXT
(
"Programmable"
)
));
// ProgID key value
keyClose
(
keySetDef
(
keyCreate
(
hClassKey
,
...
...
@@ -274,23 +271,23 @@ static HRESULT RegisterClassID(HKEY hParent, REFCLSID rclsid, unsigned int versi
// VersionIndependentProgID key value
keyClose
(
keySetDef
(
keyCreate
(
hClassKey
,
"VersionIndependentProgID"
),
PROGID_STR
,
sizeof
(
PROGID_STR
)));
TEXT
(
"VersionIndependentProgID"
)
),
TEXT
(
PROGID_STR
),
sizeof
(
TEXT
(
PROGID_STR
)
)));
// Version key value
keyClose
(
keySetDef
(
keyCreate
(
hClassKey
,
"Version"
),
"1.0"
));
TEXT
(
"Version"
)
),
TEXT
(
"1.0"
)
));
// TypeLib key value
LPCSTR
psz_LIBID
=
CStrFromGUID
(
LIBID_AXVLC
)
;
if
(
NULL
!=
psz_LIBID
)
{
keyClose
(
keySetDef
(
keyCreate
(
hClassKey
,
"TypeLib"
)
,
psz_LIBID
,
GUID_STRLEN
));
CoTaskMemFree
((
void
*
)
psz_LIBID
);
}
OLECHAR
szLIBID
[
GUID_STRLEN
]
;
StringFromGUID2
(
LIBID_AXVLC
,
szLIBID
,
GUID_STRLEN
);
keyClose
(
keySetDef
(
keyCreate
(
hClassKey
,
TEXT
(
"TypeLib"
)),
szLIBID
,
sizeof
(
szLIBID
))
);
RegCloseKey
(
hClassKey
);
}
return
S_OK
;
...
...
@@ -300,14 +297,14 @@ STDAPI DllRegisterServer(VOID)
{
DllUnregisterServer
();
char
DllPath
[
MAX_PATH
];
DWORD
DllPathLen
=
GetModuleFileName
A
(
h_instance
,
DllPath
,
sizeof
(
DllPath
)
)
;
TCHAR
DllPath
[
MAX_PATH
];
DWORD
DllPathLen
=
GetModuleFileName
(
h_instance
,
DllPath
,
MAX_PATH
)
;
if
(
0
==
DllPathLen
)
return
E_UNEXPECTED
;
HKEY
hBaseKey
;
if
(
ERROR_SUCCESS
!=
RegOpenKeyEx
A
(
HKEY_CLASSES_ROOT
,
"CLSID"
,
0
,
KEY_CREATE_SUB_KEY
,
&
hBaseKey
)
)
if
(
ERROR_SUCCESS
!=
RegOpenKeyEx
(
HKEY_CLASSES_ROOT
,
TEXT
(
"CLSID"
)
,
0
,
KEY_CREATE_SUB_KEY
,
&
hBaseKey
)
)
return
SELFREG_E_CLASS
;
RegisterClassID
(
hBaseKey
,
CLSID_VLCPlugin
,
1
,
FALSE
,
DllPath
,
DllPathLen
);
...
...
@@ -334,34 +331,19 @@ STDAPI DllRegisterServer(VOID)
pcr
->
Release
();
}
// register type lib into the registry
ITypeLib
*
typeLib
;
#ifdef BUILD_LOCALSERVER
// replace .exe by .tlb
strcpy
(
DllPath
+
DllPathLen
-
4
,
".tlb"
);
_tcscpy
(
DllPath
+
DllPathLen
-
4
,
TEXT
(
".tlb"
)
);
#endif
#ifndef OLE2ANSI
size_t
typeLibPathLen
=
MultiByteToWideChar
(
CP_ACP
,
0
,
DllPath
,
-
1
,
NULL
,
0
);
if
(
typeLibPathLen
>
0
)
{
LPOLESTR
typeLibPath
=
(
LPOLESTR
)
CoTaskMemAlloc
(
typeLibPathLen
*
sizeof
(
wchar_t
));
MultiByteToWideChar
(
CP_ACP
,
0
,
DllPath
,
DllPathLen
,
typeLibPath
,
typeLibPathLen
);
if
(
FAILED
(
LoadTypeLibEx
(
typeLibPath
,
REGKIND_REGISTER
,
&
typeLib
))
)
#ifndef BUILD_LOCALSERVER
return
SELFREG_E_TYPELIB
;
// register type lib into the registry
ITypeLib
*
typeLib
;
HRESULT
result
=
LoadTypeLibEx
(
DllPath
,
REGKIND_REGISTER
,
&
typeLib
);
if
(
SUCCEEDED
(
result
)
)
typeLib
->
Release
();
#endif
CoTaskMemFree
((
void
*
)
typeLibPath
);
}
#else
if
(
FAILED
(
LoadTypeLibEx
((
LPOLESTR
)
DllPath
,
REGKIND_REGISTER
,
&
typeLib
))
)
return
SELFREG_E_TYPELIB
;
typeLib
->
Release
();
#endif
return
S_OK
;
return
result
;
};
#ifdef BUILD_LOCALSERVER
...
...
activex/plugin.cpp
View file @
ebf11a99
...
...
@@ -430,30 +430,43 @@ HRESULT VLCPlugin::getVLC(libvlc_instance_t** pp_libvlc)
int
ppsz_argc
=
1
;
HKEY
h_key
;
DWORD
i_type
,
i_data
=
MAX_PATH
+
1
;
char
p_data
[
MAX_PATH
+
1
];
if
(
RegOpenKeyEx
(
HKEY_LOCAL_MACHINE
,
"Software
\\
VideoLAN
\\
VLC"
,
char
p_data
[
MAX_PATH
];
if
(
RegOpenKeyEx
(
HKEY_LOCAL_MACHINE
,
TEXT
(
"Software
\\
VideoLAN
\\
VLC"
),
0
,
KEY_READ
,
&
h_key
)
==
ERROR_SUCCESS
)
{
if
(
RegQueryValueEx
(
h_key
,
"InstallDir"
,
0
,
&
i_type
,
(
LPBYTE
)
p_data
,
&
i_data
)
==
ERROR_SUCCESS
)
DWORD
i_type
,
i_data
=
MAX_PATH
;
TCHAR
w_data
[
MAX_PATH
];
if
(
RegQueryValueEx
(
h_key
,
TEXT
(
"InstallDir"
),
0
,
&
i_type
,
(
LPBYTE
)
w_data
,
&
i_data
)
==
ERROR_SUCCESS
)
{
if
(
i_type
==
REG_SZ
)
{
strcat
(
p_data
,
"
\\
plugins"
);
ppsz_argv
[
ppsz_argc
++
]
=
"--plugin-path"
;
ppsz_argv
[
ppsz_argc
++
]
=
p_data
;
if
(
WideCharToMultiByte
(
CP_UTF8
,
0
,
w_data
,
-
1
,
p_data
,
sizeof
(
p_data
)
-
sizeof
(
"
\\
plugins"
)
+
1
,
NULL
,
NULL
)
)
{
strcat
(
p_data
,
"
\\
plugins"
);
ppsz_argv
[
ppsz_argc
++
]
=
"--plugin-path"
;
ppsz_argv
[
ppsz_argc
++
]
=
p_data
;
}
}
}
RegCloseKey
(
h_key
);
}
char
p_path
[
MAX_PATH
+
1
];
DWORD
len
=
GetModuleFileNameA
(
DllGetModule
(),
p_path
,
sizeof
(
p_path
));
if
(
len
>
0
)
char
p_path
[
MAX_PATH
];
{
p_path
[
len
]
=
'\0'
;
ppsz_argv
[
0
]
=
p_path
;
TCHAR
w_path
[
MAX_PATH
];
DWORD
len
=
GetModuleFileName
(
DllGetModule
(),
w_path
,
MAX_PATH
);
if
(
len
>
0
)
{
len
=
WideCharToMultiByte
(
CP_UTF8
,
0
,
w_path
,
len
,
p_path
,
sizeof
(
p_path
)
-
1
,
NULL
,
NULL
);
if
(
len
>
0
)
{
p_path
[
len
]
=
'\0'
;
ppsz_argv
[
0
]
=
p_path
;
}
}
}
// make sure plugin isn't affected with VLC single instance mode
...
...
@@ -681,7 +694,7 @@ HRESULT VLCPlugin::onActivateInPlace(LPMSG lpMesg, HWND hwndParent, LPCRECT lprc
** properly displayed.
*/
_inplacewnd
=
CreateWindow
(
_p_class
->
getInPlaceWndClassName
(),
"VLC Plugin In-Place Window"
,
TEXT
(
"VLC Plugin In-Place Window"
)
,
WS_CHILD
|
WS_CLIPCHILDREN
|
WS_CLIPSIBLINGS
,
lprcPosRect
->
left
,
lprcPosRect
->
top
,
...
...
activex/plugin.h
View file @
ebf11a99
...
...
@@ -51,7 +51,7 @@ public:
REFCLSID
getClassID
(
void
)
{
return
(
REFCLSID
)
_classid
;
};
LPCSTR
getInPlaceWndClassName
(
void
)
const
{
return
TEXT
(
"VLC Plugin In-Place"
);
};
LPC
T
STR
getInPlaceWndClassName
(
void
)
const
{
return
TEXT
(
"VLC Plugin In-Place"
);
};
HINSTANCE
getHInstance
(
void
)
const
{
return
_hinstance
;
};
LPPICTURE
getInPlacePict
(
void
)
const
{
if
(
NULL
!=
_inplace_picture
)
_inplace_picture
->
AddRef
();
return
_inplace_picture
;
};
...
...
activex/utils.cpp
View file @
ebf11a99
...
...
@@ -77,28 +77,6 @@ BSTR BSTRFromCStr(UINT codePage, LPCSTR s)
return
NULL
;
};
char
*
CStrFromGUID
(
REFGUID
clsid
)
{
LPOLESTR
oleStr
;
if
(
FAILED
(
StringFromIID
(
clsid
,
&
oleStr
))
)
return
NULL
;
#ifdef OLE2ANSI
return
(
LPCSTR
)
oleStr
;
#else
char
*
pct_CLSID
=
NULL
;
size_t
len
=
WideCharToMultiByte
(
CP_ACP
,
0
,
oleStr
,
-
1
,
NULL
,
0
,
NULL
,
NULL
);
if
(
len
>
0
)
{
pct_CLSID
=
(
char
*
)
CoTaskMemAlloc
(
len
);
WideCharToMultiByte
(
CP_ACP
,
0
,
oleStr
,
-
1
,
pct_CLSID
,
len
,
NULL
,
NULL
);
}
CoTaskMemFree
(
oleStr
);
return
pct_CLSID
;
#endif
};
/*
** properties
*/
...
...
activex/utils.h
View file @
ebf11a99
...
...
@@ -32,8 +32,6 @@ extern char *CStrFromWSTR(UINT codePage, LPCWSTR wstr, UINT len);
extern
char
*
CStrFromBSTR
(
UINT
codePage
,
BSTR
bstr
);
extern
BSTR
BSTRFromCStr
(
UINT
codePage
,
LPCSTR
s
);
extern
char
*
CStrFromGUID
(
REFGUID
clsid
);
// properties
extern
HRESULT
GetObjectProperty
(
LPUNKNOWN
object
,
DISPID
dispID
,
VARIANT
&
v
);
...
...
configure.ac
View file @
ebf11a99
...
...
@@ -5268,7 +5268,7 @@ then
AC_LANG_PUSH(C++)
AC_CHECK_HEADERS(ole2.h,
[AC_CHECK_HEADERS(olectl.h,
[ VLC_ADD_CPPFLAGS([activex],[-D_MIDL_USE_GUIDDEF_])
[ VLC_ADD_CPPFLAGS([activex],[-D
UNICODE -D_UNICODE -D
_MIDL_USE_GUIDDEF_])
VLC_ADD_CXXFLAGS([activex],[-fno-exceptions])
VLC_ADD_LDFLAGS([activex],[-lole32 -loleaut32 -luuid -lshlwapi])
AC_CHECK_HEADERS(objsafe.h,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment