Commit 6514f2c31c15e835b54030c3120b35eaea0fa0cc
1 parent
07f0e959
Exists in
master
and in
5 other branches
Implementando construção de método API para plugins.
Showing
2 changed files
with
28 additions
and
6 deletions
Show diff stats
src/classlib/local.cc
@@ -173,11 +173,8 @@ | @@ -173,11 +173,8 @@ | ||
173 | const char * (*_ebc2asc)(H3270 *hSession, unsigned char *buffer, int sz); | 173 | const char * (*_ebc2asc)(H3270 *hSession, unsigned char *buffer, int sz); |
174 | const char * (*_asc2ebc)(H3270 *hSession, unsigned char *buffer, int sz); | 174 | const char * (*_asc2ebc)(H3270 *hSession, unsigned char *buffer, int sz); |
175 | 175 | ||
176 | - public: | 176 | + void load_methods() { |
177 | 177 | ||
178 | - local() throw(std::exception) : module("lib3270",PACKAGE_VERSION) | ||
179 | - { | ||
180 | - H3270 * (*lib3270_new)(const char *); | ||
181 | void (*set_log_handler)(void (*loghandler)(H3270 *, const char *, int, const char *, va_list)); | 178 | void (*set_log_handler)(void (*loghandler)(H3270 *, const char *, int, const char *, va_list)); |
182 | void (*set_trace_handler)( void (*handler)(H3270 *session, const char *fmt, va_list args) ); | 179 | void (*set_trace_handler)( void (*handler)(H3270 *session, const char *fmt, va_list args) ); |
183 | 180 | ||
@@ -187,7 +184,6 @@ | @@ -187,7 +184,6 @@ | ||
187 | const char * name; | 184 | const char * name; |
188 | } call[] = | 185 | } call[] = |
189 | { | 186 | { |
190 | - { (void **) & lib3270_new, "lib3270_session_new" }, | ||
191 | { (void **) & set_log_handler, "lib3270_set_log_handler" }, | 187 | { (void **) & set_log_handler, "lib3270_set_log_handler" }, |
192 | { (void **) & set_trace_handler, "lib3270_set_trace_handler" }, | 188 | { (void **) & set_trace_handler, "lib3270_set_trace_handler" }, |
193 | 189 | ||
@@ -255,12 +251,32 @@ | @@ -255,12 +251,32 @@ | ||
255 | // Get Session handle, setup base callbacks | 251 | // Get Session handle, setup base callbacks |
256 | set_log_handler(loghandler); | 252 | set_log_handler(loghandler); |
257 | set_trace_handler(tracehandler); | 253 | set_trace_handler(tracehandler); |
258 | - this->hSession = lib3270_new(""); | ||
259 | 254 | ||
260 | set_display_charset(); | 255 | set_display_charset(); |
261 | 256 | ||
262 | } | 257 | } |
263 | 258 | ||
259 | + public: | ||
260 | + | ||
261 | + local() throw(std::exception) : module("lib3270",PACKAGE_VERSION) | ||
262 | + { | ||
263 | + H3270 * (*lib3270_new)(const char *) = (H3270 * (*)(const char *)) get_symbol("lib3270_session_new"); | ||
264 | + | ||
265 | + if(!lib3270_new) | ||
266 | + throw exception("Can't find symbol %s","lib3270_session_new"); | ||
267 | + | ||
268 | + this->hSession = lib3270_new(""); | ||
269 | + | ||
270 | + load_methods(); | ||
271 | + | ||
272 | + } | ||
273 | + | ||
274 | + local(H3270 * hSession) throw(std::exception) : module("lib3270",PACKAGE_VERSION) | ||
275 | + { | ||
276 | + this->hSession = hSession; | ||
277 | + load_methods(); | ||
278 | + } | ||
279 | + | ||
264 | virtual ~local() | 280 | virtual ~local() |
265 | { | 281 | { |
266 | this->lock(); | 282 | this->lock(); |
@@ -546,5 +562,10 @@ | @@ -546,5 +562,10 @@ | ||
546 | return new local(); | 562 | return new local(); |
547 | } | 563 | } |
548 | 564 | ||
565 | + session * session::create_local(H3270 *hSession) throw (std::exception) | ||
566 | + { | ||
567 | + return new local(hSession); | ||
568 | + } | ||
569 | + | ||
549 | } | 570 | } |
550 | 571 |
src/include/pw3270/class.h
@@ -278,6 +278,7 @@ | @@ -278,6 +278,7 @@ | ||
278 | 278 | ||
279 | static session * create_remote(const char *name) throw (std::exception); | 279 | static session * create_remote(const char *name) throw (std::exception); |
280 | static session * create_local(void) throw (std::exception); | 280 | static session * create_local(void) throw (std::exception); |
281 | + static session * create_local(H3270 *hSession) throw (std::exception); | ||
281 | 282 | ||
282 | #ifdef HAVE_ICONV | 283 | #ifdef HAVE_ICONV |
283 | iconv_t conv2Local; | 284 | iconv_t conv2Local; |