|
Hi all,
While debugging the following code,
inline LONG CRegKey::QueryValue(LPTSTR szValue, LPCTSTR lpszValueName, DWORD* pdwCount)
{
ATLASSERT(pdwCount != NULL);
DWORD dwType = NULL;
LONG lRes = RegQueryValueEx(m_hKey, (LPTSTR)lpszValueName, NULL, &dwType,
(LPBYTE)szValue, pdwCount);
ATLASSERT((lRes!=ERROR_SUCCESS) || (dwType == REG_SZ) ||
(dwType == REG_MULTI_SZ) || (dwType == REG_EXPAND_SZ));
return lRes;
}
Here the value for (LPTSTR)lpszValueName is 'SQLPath' and the value which returns for 'szValue' in RegQueryValueEx method is “c:\Program Files (x86)\Microsoft SQL Server\100\Tools\” which should be “c:\Program Files\Microsoft SQL Server\100\Tools\”
We have noted that the data value for SQLPath in RegistryKey "SOFTWARE\Microsoft\Microsoft SQL Server\100\Tools\ClientSetup" is “c:\Program Files\Microsoft SQL Server\100\Tools\”
Could anybody please tell why RegQueryValueEx method is returning a wrong value “c:\Program Files (x86)\Microsoft SQL Server\100\Tools\” which should be “c:\Program Files\Microsoft SQL Server\100\Tools\”
Thanks in advance
|
|
|
|
|
It may be that you are running a 32 bit application, in which case it will use Program Files (x86) , which is where the 32-bit versions are located.
|
|
|
|
|
Thanks a lot!!
|
|
|
|
|
When a 32 bit application accesses the path starting with SOFTWARE under the key HKEY_LOCAL_MACHINE on a 64 bit OS, there is a Wow6432Node added automatically after the SOFTWARE. So the path you really accessed was
"SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server\100\Tools\ClientSetup"
instead of the one you expected.
Depening on what you want to use the information for, you may need to compile your app as x64.
The good thing about pessimism is, that you are always either right or pleasently surprised.
|
|
|
|
|
Thanks a lot!!
|
|
|
|
|
|
Thanks a lot David!!
|
|
|
|
|
Hi,
I'm trying to read a BMP image, the code is as follows. If i'm using a value 820 as BMP_HEADER_SIZE, my program works fine. I tried calculating the BMP_HEADER_SIZE value by summing the size of structure tagBITMAPFILEHEADER and tagBITMAPINFOHEADER (from BMP header file) but the program is not working. How can i solve this?
Class BlockinessProc.
# define BMP_HEADER_SIZE 820
void ReadImage(const char* filename);
char m_info[BMP_HEADER_SIZE];
unsignedchar** m_memblock;
void Blockinessproc::ReadImage(const char* filename)// Reading a BMP Image
{
streampos size;
ifstream inFile;
inFile.open(filename, ios::in|ios::binary);
if (inFile.is_open())
{
inFile.seekg (0, ios::beg);
long nHeaderSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
inFile.read ((char*)m_info, nHeaderSize);
width = *(int*)&m_info[18]; //Getting Image width from Header
height = *(int*)&m_info[22];// Getting Image height from Header
long pos = inFile.tellg();
m_memblock = new uchar* [width];
m_memblock_out = new uchar* [width];
for (int i = 0; i < height; i++) // create new array size: height of image.
{
m_memblock[i] = new uchar [width*3];
m_memblock_out[i] = new uchar [width*3];
}
int size_s = inFile.gcount();
inFile.seekg (pos);
for(int i=0; i<height; i++)="" read="" row="" into="" each="" array="" entry.
="" {
="" infile.read="" (reinterpret_cast<char*="">(m_memblock[i]), width*3);
}
inFile.close();
}
}
Thanks in Advance
|
|
|
|
|
Please edit your question and format you code by placing <pre> tags around it, so it is readable like:
streampos size;
ifstream inFile;
inFile.open(filename, ios::in|ios::binary);
Also, and most important, please explain what "the program is not working" means.
|
|
|
|
|
I have the same question, what is meaning of the program is not working.
Be crashing or something else.
|
|
|
|
|
You know, the BITMAPFILEHEADER may be followed either by a BITMAPINFOHEADER or by a BITMAPV4HEADER or by a BITMAPV5HEADER structure, see the documentation[^].
Veni, vidi, vici.
|
|
|
|
|
can u help me Sun Directory warning is build file gmake
after build gmake show
- warning:passing arg 2 of 'connect' from incompatible pointer type id -G -o 64/dpss.so dpss.o
Code...
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#include <sys types.h="">
#include <sys socket.h="">
#include <netinet in.h="">
#include <netdb.h>
#ifndef _WIN32
#include <libgen.h>#endif
#include "slapi-plugin.h"
#define SLAPD_LOGGING 1
#define _ADD 0
#define _MOD 1
#define _DEL 2
#define _MODRDN 3
Slapi_PluginDesc DPSS_desc = {
"DPSS", /* plug-in identifier */
"DThai Professional Services", /* vendor name */
"1.0", /* plug-in revision number */
"capture password change plugin" /* plug-in description */
};
static Slapi_ComponentId * DPSS_id; /* Used to set log */
char * changelogfile = NULL; /* Write changes to this file */
char * changelogfile2 = NULL; /* Write changes to this file */
char **argument; /* receive username and port */
#define NULL_CHANGELOG_WARNING_ID 0L
#define CANNOT_APPEND_TO_CHANGELOG_WARNING_ID 1L
/* Current time is a function defined in the server */
time_t current_time(void);
/* Initialization function before write log file */
int DPSS_set_log(Slapi_PBlock * pb);
/* Log the DN of the added entry */
int DPSS_add(Slapi_PBlock * pb);
/* Log the DN of the modified entry */
int DPSS_mod(Slapi_PBlock * pb);
/* Logs information on an operation to a change log file */
static void write_changelog(int optype, char *dn, void *change);
/* get the DS errorlog path by reading configuration entry */
/* which has dn=config and find nsslapd-errorlog attribute */
/* then create changelogfile path near the errorlog */
int DPSS_set_log(Slapi_PBlock * pb)
{
Slapi_DN * confdn = NULL; /* DN for configuration entry */
Slapi_Entry * config = NULL; /* Configuration entry */
char * errlog = NULL; /* Errors log file name */
char * logdir = NULL; /* Errors log directory name */
FILE * fp; /* Use to open changelog file */
int rc = 0; /* Use to check success */
#ifdef _WIN32
char drive[_MAX_DRIVE]; /* Windows disk drive */
char dir[_MAX_DIR]; /* Windows folder name */
char fname[_MAX_FNAME]; /* Windows file name */
char ext[_MAX_EXT]; /* Windows file extension */
char tmp_path[_MAX_PATH]; /* Working log directory name */
#endif
/* if changelogfile already set, return it */
if (changelogfile != NULL) return (rc);
/* get configuration entry */
confdn = slapi_sdn_new_dn_byval("cn=config");
if (confdn == NULL) return (rc);
rc |= slapi_search_internal_get_entry(confdn, NULL, &config, DPSS_id);
/* if cannot get configuration entry, write error to errorlog */
if (rc != 0) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"DPSS_init in DPSS plug-in",
"Failed to read configuration entry: %d\n", rc
);
return (rc);
}
/* returns allocated memory for confdn */
slapi_sdn_free(&confdn);
/* get error log filename */
errlog = slapi_entry_attr_get_charptr(config, "nsslapd-errorlog");
slapi_entry_free(config);
config = NULL;
/* set changelog file path which next to the DS error log */
/* windows OS */
#ifdef _WIN32
_splitpath(errlog, drive, dir, fname, ext);
logdir = slapi_ch_strdup((char *)dir);
_makepath(tmp_path, drive, logdir, "changelog", "txt");
changelogfile = slapi_ch_strdup((char *)tmp_path);
/* Unix or Linux OS */
#else
logdir = slapi_ch_strdup((char *)dirname(errlog));
changelogfile = slapi_ch_malloc(strlen(logdir)+strlen("/changelog.txt")+1);
sprintf(changelogfile, "%s%s", logdir, "/changelog.txt");
#endif
slapi_ch_free_string(&errlog);
slapi_ch_free_string(&logdir);
/* if error and changelog path cannot be set */
if (changelogfile == NULL) {
slapi_log_warning_ex(
NULL_CHANGELOG_WARNING_ID,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"write_changelog in DPSS plug-in",
"No changelog file for DPSS plug-in",
"Path to changelog file is NULL!\n"
);
return (-1);
}
/* cannot open changelog file */
if ((fp = fopen(changelogfile, "ab")) == NULL) {
slapi_log_warning_ex(
CANNOT_APPEND_TO_CHANGELOG_WARNING_ID,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"DPSS_set_log in DPSS plug-in",
"Write error in DPSS plug-in",
"Plug-in cannot create log file %s\n", changelogfile
);
return (-1);
}
fclose(fp);
return (rc);
}
/* returns memory allocated for changelog file*/
int DPSS_free_log(Slapi_PBlock * pb)
{
slapi_ch_free_string(&changelogfile);
return 0;
}
/* Log the DN of the added entry and write to the changelog */
int DPSS_add(Slapi_PBlock * pb)
{
char * dn; /* DN of entry to add */
Slapi_Entry * entry; /* Entry to add */
int is_repl = 0; /* Is this replication? */
int rc = 0; /* 0 mean success */
int connId, opId;
long msgId;
rc |= slapi_pblock_get(pb, SLAPI_ADD_TARGET, &dn);
rc |= slapi_pblock_get(pb, SLAPI_ADD_ENTRY, &entry);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_MSGID, &msgId);
rc |= slapi_pblock_get(pb, SLAPI_CONN_ID, &connId);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_ID, &opId);
rc |= slapi_pblock_get(pb, SLAPI_IS_REPLICATED_OPERATION, &is_repl);
/* write error log */
if (rc != 0) return (rc);
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"DPSS_add in DPSS plug-in",
"Added entry (%s)\n", dn
);
/* In general, do not interfere in replication operations. */
/* Log the DN and the entry to the change log file. */
if (!is_repl) write_changelog(_ADD, dn, (void *) entry);
return (rc);
}
/* Log the DN of the modified entry and write to the changelog */
int DPSS_mod(Slapi_PBlock * pb)
{
char * dn; /* DN of entry to modify */
LDAPMod ** mods; /* Modifications to apply */
int is_repl = 0; /* Is this replication? */
int connId, opId, rc = 0;
long msgId;
rc |= slapi_pblock_get(pb, SLAPI_MODIFY_TARGET, &dn);
rc |= slapi_pblock_get(pb, SLAPI_MODIFY_MODS, &mods);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_MSGID, &msgId);
rc |= slapi_pblock_get(pb, SLAPI_CONN_ID, &connId);
rc |= slapi_pblock_get(pb, SLAPI_OPERATION_ID, &opId);
rc |= slapi_pblock_get(pb, SLAPI_IS_REPLICATED_OPERATION, &is_repl);
if (rc != 0) return (rc);
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
msgId,
connId,
opId,
"DPSS_mod in DPSS plug-in",
"Modified entry (%s)\n", dn
);
/* In general, do not interfere in replication operations. */
/* Log the DN and the modifications made to the change log file. */
if (!is_repl) write_changelog(_MOD, dn, (void *) mods);
return (rc);
}
/* Register plug-in to the server. */
#ifdef _WIN32
__declspec(dllexport)
#endif
/* Function for generating a generalizedTime */
static char* format_localTime(time_t timeval)
{
char* into;
struct tm t;
#ifdef _WIN32
memcpy (&t, localtime (&timeval), sizeof(t));
#else
localtime_r (&timeval, &t);
#endif
/* Allocate memory for the formatted string. */
/* This string is freed by call function write_changelog(). */
into = slapi_ch_malloc(15);
sprintf (into, "%.4li%.2i%.2i%.2i%.2i%.2i",
1900L + t.tm_year, 1 + t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec);
return into;
}
static void debugs(char *message)
{
changelogfile2 = "/var/opt/dsee7/dsins1/logs/changelog2.txt";
FILE *fp;
/* if cannot open change log file */
if (changelogfile2 == NULL) {
return;
}
/* if cannot append to change log file */
if ((fp = fopen(changelogfile2, "ab")) == NULL) {
return;
}
fprintf(fp, "--- pass %s ---\n", message);
fclose(fp);
return;
}
/* Logs information on an operation to a change log file.
Parameters;
- optype is type of LDAP operation to record:
1. _ADD for LDAP add operations
2. _MOD for LDAP modify operations
- dn is DN of the entry affected by the operation.
- change is information about the operation performed.
The type of information depends on the value of optype:
1. For _ADD, it is the newly added entry (Slapi_Entry).
2. For _MOD, it is the list of modifications made (array of LDAPMod).
*/
void write_changelog(int optype, char *dn, void *change)
{
LDAPMod **mods;
Slapi_Entry *e;
int len, i, j;
FILE *fp;
char *timestr;
char *password;
const char *PSW_ATTR = "unhashed#user#password";
/* if cannot open change log file */
if (changelogfile == NULL) {
slapi_log_warning_ex(
CANNOT_APPEND_TO_CHANGELOG_WARNING_ID,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"write_changelog in DPSS plug-in",
"Write error in DPSS plug-in",
"Plug-in cannot append to log file\n"
);
return;
}
/* if cannot append to change log file */
if ((fp = fopen(changelogfile, "ab")) == NULL) {
slapi_log_warning_ex(
CANNOT_APPEND_TO_CHANGELOG_WARNING_ID,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"DPSS_set_log in DPSS plug-in",
"Write error in DPSS plug-in",
"Plug-in cannot create log file %s\n", changelogfile
);
return;
}
/* write current date and time when event is handled */
timestr = format_localTime(current_time());
fprintf(fp, "time: %s\n", timestr);
/* write user dn */
fprintf(fp, "dn: %s\n", dn);
/* check if type is create or modify */
switch (optype) {
/* if add user */
case _ADD:
/* For LDAP add operations, log the newly added entry. */
e = (Slapi_Entry *)change;
fprintf( fp, "type: add\n" );
/* get password value from PSW_ATTR attribute */
char* pvalue = NULL;
if (pvalue = slapi_entry_attr_get_charptr(e, PSW_ATTR)) {
/* send uid & password over machine*/
char *message = NULL;
message = slapi_ch_malloc(strlen(dn) + strlen("<value>") + strlen(pvalue) +
strlen("<value><add><value>") + strlen(timestr) + strlen("<end>") + 1);
sprintf(message, "%s%s%s%s%s%s", dn, "<value>", pvalue, "<value>add<value>", timestr, "<end>");
send_message(message);
/* write changed password value */
fprintf( fp, "%s\n\n", pvalue );
slapi_ch_free_string(&message);
slapi_ch_free((void **)&pvalue);
}
break;
/* if modify user */
case _MOD:
/* convert modify entry to LDAPMod type */
mods = (LDAPMod **)change;
fprintf(fp, "type: reset\n");
for (j = 0; mods[j] != NULL; j++) {
/* if set attribute value to blank */
if ((mods[j]->mod_op & ~LDAP_MOD_BVALUES) == LDAP_MOD_DELETE) {
/* send uid & password over machine*/
char *message = NULL;
message = slapi_ch_malloc(strlen(dn) + strlen("<value><value><modify><value>") +
strlen(timestr) + strlen("<end>") + 1);
sprintf(message, "%s%s%s%s", dn, "<value><value>modify<value>", timestr, "<end>");
send_message(message);
slapi_ch_free_string(&message);
/* write blank password value */
fprintf(fp, "%s: %s\n", mods[j]->mod_type, "");
}
/* if modify attribute value */
else {
for (i = 0; mods[j]->mod_bvalues != NULL &&
mods[j]->mod_bvalues[i] != NULL; i++) {
/* if changed attribute is password */
if (strcmp(mods[j]->mod_type, PSW_ATTR) == 0) {
/* send uid & password over machine*/
char *message = NULL;
message = slapi_ch_malloc(strlen(dn) + strlen("<value>") +
strlen(mods[j]->mod_bvalues[i]->bv_val) + strlen("<value><modify><value>") +
strlen(timestr) + strlen("<end>") + 1);
sprintf(message, "%s%s%s%s%s%s", dn, "<value>",
mods[j]->mod_bvalues[i]->bv_val, "<value>modify<value>", timestr, "<end>");
send_message(message);
slapi_ch_free_string(&message);
/* write changed password value */
fprintf(fp, "%s: %s\n", mods[j]->mod_type,
mods[j]->mod_bvalues[i]->bv_val);
//fprintf(fp, "%s %s\n\n", argument[0], argument[1]);
}
}
}
}
break;
}
slapi_ch_free((void **) ×tr);
fprintf(fp, "\n");
fclose(fp);
}
void error(char *msg)
{
perror(msg);
exit(0);
}
int send_message(char* message)
{
char* ip = "172.32.5.107";
char* port = "12199";
if (argument[0] != NULL)
ip = argument[0];
if (argument[1] != NULL)
port = argument[1];
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
portno = atoi(port);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
error("ERROR opening socket");
exit(0);
}
else
{
server = gethostbyname(ip);
if (server == NULL) {
//fprintf(stderr,"ERROR, no such host\n");
//exit(0);
close(sockfd);
return(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr.s_addr,
server->h_length);
serv_addr.sin_port = htons(portno);
=> this warning if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0) {
close(sockfd);
return(0);
}
bzero(buffer,256);
n = write(sockfd,message,strlen(message));
//if (n < 0)
// error("ERROR writing to socket");
bzero(buffer,256);
//n = read(sockfd,buffer,255);
//if (n < 0)
//error("ERROR reading from socket");
//printf("%s\n",buffer);
}
close(sockfd);
return 0;
}
/* Initial function */
/* must register this function when run "dsconf create-plugin..." */
int DPSS_init(Slapi_PBlock * pb)
{
char ** argv; /* Args from configuration */
int argc; /* entry for plug-in. */
int rc = 0; /* 0 means success */
//static char **config;
int i;
/* Get the arguments from the configuration entry. */
rc |= slapi_pblock_get(pb, SLAPI_PLUGIN_ARGV, &argv);
rc |= slapi_pblock_get(pb, SLAPI_PLUGIN_ARGC, &argc);
if (rc != 0) {
slapi_log_info_ex(
SLAPI_LOG_INFO_AREA_PLUGIN,
SLAPI_LOG_INFO_LEVEL_DEFAULT,
SLAPI_LOG_NO_MSGID,
SLAPI_LOG_NO_CONNID,
SLAPI_LOG_NO_OPID,
"DPSS_init in DPSS plug-in",
"Could not get plug-in arguments.\n");
return (rc);
}
argument = (char **)slapi_ch_malloc((argc + 1) * sizeof(char *));
for (i = 0; i < argc; ++i) {
argument[i] = slapi_ch_strdup(argv[i]);
}
argument[argc] = NULL;
rc |= slapi_pblock_set( /* Plug-in API version */
pb,
SLAPI_PLUGIN_VERSION,
SLAPI_PLUGIN_CURRENT_VERSION
);
rc |= slapi_pblock_set( /* Plug-in description */
pb,
SLAPI_PLUGIN_DESCRIPTION,
(void *) &DPSS_desc
);
rc |= slapi_pblock_set( /* Open log at startup */
pb,
SLAPI_PLUGIN_START_FN,
(void *) DPSS_set_log
);
rc |= slapi_pblock_set( /* Post-op add function */
pb,
SLAPI_PLUGIN_POST_ADD_FN,
(void *) DPSS_add
);
rc |= slapi_pblock_set( /* Post-op modify function */
pb,
SLAPI_PLUGIN_POST_MODIFY_FN,
(void *) DPSS_mod
);
rc |= slapi_pblock_set( /* Close log on shutdown */
pb,
SLAPI_PLUGIN_CLOSE_FN,
(void *) DPSS_free_log
);
/* Plug-in identifier is required for internal search. */
rc |= slapi_pblock_get(pb, SLAPI_PLUGIN_IDENTITY, &DPSS_id);
return (rc);
}
modified 26-May-14 4:36am.
|
|
|
|
|
Please do not dump a huge block of code like this and expect people to debug it for you. Edit your question and remove all the lines that are not relevant to your problem. Place <pre> tags around the remaining code so it is readable, and show clearly which is the line in error.
|
|
|
|
|
Edit already Can U help Me Please....
|
|
|
|
|
Well, you did not remove all the code that is not relevant. However your second parameter on the connect call is defined as a struct sockaddr_in* but according to the documentation[^] it should be a struct sockaddr* .
|
|
|
|
|
Give i do this ==> Yes or not
if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0) {
close(sockfd);
return(0);
}
|
|
|
|
|
Yes you can do that but you need to check that both structures are exactly the same in both content and size.
|
|
|
|
|
thank so Must...but you can help solution me again Please??
Now gmkae build file dpss.c not warning already..but Plugin Me cann't sent password to protocal LDAP From Sun to Active Directory not have event log... I don't know sun directory need config port same function send_message
int send_message(char* message)
{
char* ip = "172.32.5.107";
char* port = "12199";
if (argument[0] != NULL)
ip = argument[0];
if (argument[1] != NULL)
port = argument[1];
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
portno = atoi(port);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
error("ERROR opening socket");
exit(0);
}
else
{
server = gethostbyname(ip);
if (server == NULL) {
close(sockfd);
return(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr.s_addr,
server->h_length);
serv_addr.sin_port = htons(portno);
if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0) {
close(sockfd);
return(0);
}
bzero(buffer,256);
n = write(sockfd,message,strlen(message));
bzero(buffer,256);
}
close(sockfd);
return 0;
}
|
|
|
|
|
Sorry, I don't understand your question.
|
|
|
|
|
For localization purposes, I've been using the gettext library in my MSVC-compiled application (x86) using these instructions from the GNU site (https://www.gnu.org/software/gettext/FAQ.html#windows_woe32). It works fine.
Is there a 64 bit version of gettext for windows? - the one listed on the GNU site is 32bit.
modified 23-May-14 22:47pm.
|
|
|
|
|
A number of suggestions here[^].
|
|
|
|
|
Is it possible (how?)put CDocktablePane into CFormView or dockCMDIChildWndEx like CDocktablePane? (Visual Studio 2010)
I've found following instruction, but I'm not able to use it
http://www.johnbyrd.org/blog/index.php?catid=2&blogid=1
I don't understand for example this text
At this point, you should search through your old CView class to find any references to a COleDropTarget. These references should be changed to refer to the m_OleDropTarget member that you put within the CYourDockablePane class.
I believe that somebody smarter tham me will be able to help me
thank you in advance
|
|
|
|
|
Or you could just ask the person who wrote the blog.
|
|
|
|
|
How?
do you know him?
do you have any cotact to him?
could you share it with me?
modified 23-May-14 15:44pm.
|
|
|
|
|
What? You posted a link to his blog in your original question.
|
|
|
|
|